반응형




제 책을 담당해 주시는 '전설의 에디터'님께서 보내주신 조판용 원고입니다. 

실제 책을 펼친 모양과 거의 같다고 보시면 될꺼에요~ 


이 엄청난 분량을 작업하시느라 고생하셨을 에디터님께 감사의 마음을 전합니다. ^^


제가 좋아하는 [연금술사] 책을 올려보았습니다. 

대략 분량이 가늠되시나요? 

1차로 180 페이지 정도를 끝낸 나머지 모든 분량입니다.


열심히 저자 검토중이고요. 

주로 제목, 레이아웃, 그림, 내용, 오탈자 위주로 보고 있습니다.


이제 출판 작업도 반환점을 돌아 결승선이 희미하게 보이기 시작합니다. 막 두근거려요~ ^^


반응형
  1. 이전 댓글 더보기
  2. havu 2012.07.10 21:42

    책 나오면 사인회 한번 하세요!
    책 표지에 사인 받고싶네요

  3. 루리킹 2012.07.10 21:59

    ....리버싱에 관한 국산 서적을 12년전 "크랙" 이후로 한번도 구경 못했는데....
    그 이후로는 국산 리버싱 서적이 저에게는 처음이나 마찬가지네욤...정말 기대중이고욤...
    책 나오면 꼭 살께욤...
    글자 틀려도 좋으니 얼른 나오게 해주세욤 ㅜ_ㅜ

  4. ㅇㅇ 2012.07.11 15:47

    국내에서 드디어 멋진 리버싱 서적이 나온다니 기대됩니다
    존경합니다

  5. 간만에 들려 2012.07.12 14:18

    정말 오랫동안 기다렸습니다.
    하루 빨리 나오기를 기다리겠습니다 ^^

  6. ㅇㅇ 2012.07.12 22:21

    책 표지가 멋있었으면 더 좋겠습니다

  7. 호지니 2012.07.14 11:58

    (왜 그런지는 잘 모르겠지만..) 저도 무지 떨려요 ㅋㅋ
    화이팅 하시구요. 순산하시길 기원할꼐요 ^^;

  8. 채진아 2012.07.16 10:51

    기다리고 있습니다.

  9. 2012.07.16 20:23

    비밀댓글입니다

  10. hare 2012.07.19 15:49

    드디어..ㅜㅡㅜ 책 예약판매 하면 바로 지릅니다!!

  11. smartdolphin 2012.07.21 12:29

    예전부터 리버스코어에서 많은 정보를 얻고 배울 수 있어서 그런지 정말 기대하고 있습니다. 책이 나오면 예판부터 질러야 겠네요 ㅎㅎ

  12. 로크 2012.08.15 13:35

    책 제목이 어떻게 되나요??
    궁금합니다.

  13. 하겐티 2012.08.20 11:14

    1년을 기다려왔습니다. 리버스코어에서 많을것을 배웠지만
    책을 소장하고 바이블로서 활용하고 싶습니다.
    정말 기대되네요

  14. 넹군 2012.08.23 22:32

    언제 출판 될까요 이제 9월인데 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

    대략 언제 나오는지 알려주시면 ....

  15. 담벼락 2012.08.27 13:36

    기다려지내요.. 늦더라도 9월초에 나왔으면 좋겠습니다. 책이름은 이상하게 말고 reversecore 라고만 적어도 멋있을꺼 같습니다.

  16. atlantic 2012.08.30 12:23

    흑흑 ㅜㅜ 진짜 너무안나오네여! ㅜㅜㅜ

  17. 2012.09.02 14:21

    주기적으로 와보는데 경과라도 알려주시면... ㅠ

  18. reversecore 2012.09.04 03:40 신고

    안녕하세요. ReverseCore 입니다.

    아~~ 책을 기다리시는 분들께는 죄송하다는 말씀 밖에 드릴수가 없네요. ㅜㅜ

    현재 최종 원고 리뷰만을 남겨둔 상태입니다.
    조만간 최종 원고를 받아서 검토가 끝나고 편집이 완료되면,
    일단 시간이 걸리는 작업은 모두 끝나게 됩니다.

    나머지는 출판사의 출판 프로세스에 맞춰서 빠르게 진행될 것입니다.
    9월말~10월초를 출간일로 예상하고 있습니다.

    완성도를 높이기 위해 저와 출판사에서 원고를 꼼꼼하게 확인하고 있습니다.
    일단 분량(본문 1,000 페이지 & 그림 880장 & 기타)이 엄청나고 특히 제가 너무 치열하게 리뷰하고 원고를 수정하는 바람에 편집자님께서 고생하시고, 그만큼 작업 시간이 더 걸리고 있습니다. ㅜㅜ

    기다리시는 분들께 양해를 부탁드리겠습니다.

    감사합니다.

    • 담벼락1개월만 기다리면 된다니 다행이내요.. 완성도도 높이고, 2012.09.04 11:25

      1개월만 기다리면 된다니 저도 모르게 두근두근 거리네요. 완성도를 높이기위한 노력 너무 감사합니다. 얼른 책을 펼쳐 보고 싶기는 하네요.. 하하

  19. 도키도키 2012.09.04 15:45

    두근두근

  20. 9월달! 2012.09.04 17:27

    이제 9월달 입니다.!!! 흐흐흐

  21. 리버싱 2012.09.16 16:21

    벌써 기대가 됩니다

반응형


리버싱 기술을 이용하면 기존 어플리케이션의 버그를 수정하거나, 새로운 기능을 추가시킬 수 있습니다. 간단한 실습 예제를 통하여 동작원리를 소개하도록 하겠습니다.





리버싱 기술의 활용



리버싱 기술이 꼭 다른 프로그램을 분석하는 용도로만 사용되는 것은 아닙니다. 약간의 아이디어와 끈기만 있다면 여기서 조금 더 나아가 개발자들이 시도하지 않는 방법으로 작업을 진행할 수 있답니다. '개발 관점' 에서는 어렵게 보이는 문제이지만 오히려 '리버싱 관점' 에서는 쉽게 해결할 수 있는 경우도 있습니다.


* 참고


어플리케이션에 추가 기능을 삽입하는 것은 마치 "API Hooking - 계산기, 한글을 배우다. (1)" 와 비슷한 맥락의 작업 이라고 볼 수 있습니다.


자신이 개발하지 않은 (소스 코드를 가지고 있지 않은) 다른 어플리케이션의 버그 수정이나 전혀 새로운 기능 추가 같은 작업이 바로 그 좋은 예입니다. 이러한 작업의 핵심기술은 "Debugging""Injection" 그리고 "Hooking" 입니다. 또한 어셈블리 언어, PE File Format 등의 지식도 매우 중요합니다.


1) Debugging 


디버깅 기술은 매우 다양하게 사용됩니다. 먼저 작업 설계 단계에서 문제를 파악하고 해결 아이디어를 검증하고 구체화 시키는데 필수적으로 사용됩니다. 구현 단계에서 단위 모듈을 검증하는데에도 사용되고, 마지막 테스트와 버그 파악에 빠져서는 안되는 가장 중요한 기술입니다.


2) Injection


다른 프로세스를 수정하려면 일단 그 프로세스 메모리 영역으로 침투해야 합니다. 이게 바로 인젝션 기술의 역할입니다. 일단 프로세스 메모리에 침투하기만 하면 절반은 성공이라고 볼 수 있습니다.


3) Hooking


기존 코드와 다르게 동작시키려면 후킹 기술을 사용하면 됩니다. 기존에 있던 코드의 흐름을 변경시켜 사용하지 못하게 할 수 도 있고, 새로운 코드를 추가하여 전혀 다르게 동작시킬 수 도 있습니다. 


이제 간단한 실습 예제를 분석하면서 "기존 응용프로그램에 새로운 기능을 추가시키는 방법" 에 대해서 알아보도록 하겠습니다. 제가 아이디어를 내고 구체화 시키고 검증하는 과정, 그리고 실제로 구현하면서 부딪쳤던 문제들과 해결 과정에 대해 자세히 보여드릴 겁니다. 향후 여러분께서 리버싱 기술을 실무에 적용하실 때 작은 도움이 될 것입니다.




실습 프로그램 - HxD.exe 




<그림 1 - HxD.exe>


위 그림은 제가 평소 애용하는 헥스 에디터 HxD.exe 의 실행 화면입니다. dummy32.dll 라는 이름의 PE 파일을 열고 있네요. 


문득 "화면 좌측 하단의 Offset 표시 영역에 RVA 를 계산해서 같이 표시해 주면 어떨까?" 라는 아이디어가 떠올랐습니다. 아이디어의 유용성 여부를 떠나서 일단 재미있어 보였고, 어플리케이션 기능 추가라는 주제에 잘 맞을거 같다는 생각이 들었습니다.


여러차례 시도 끝에 결국 아래와 같이 성공할 수 있었습니다.



<그림 2 - PE 파일의 RVA 표시 기능이 추가된 HxD.exe>


먼저 Offset 과 RVA 를 동시에 표시하기 위해 status bar 의 좌측 하단 영역의 길이를 조금 늘렸습니다. 그리고 글씨를 출력하는 API 를 후킹하기 위한 hxdhook.dll 을 인젝션 시켰습니다. 또한 Offset <-> RVA 변환 계산 모듈 PEInfo.dll 을 로딩하여 계산을 수행하도록 만들었습니다. 이제 HxD.exe 에서 PE 파일을 열고 커서 위치가 변할 때마다 해당 파일 Offset 과 RVA 가 자동으로 표시됩니다.


다음 포스트에서 구체적인 작업 내용과 동작 원리에 대해 알아보도록 하겠습니다.



* 참고


위 실습 예제 파일은 "HxD.exe 기능 추가" 페이지에서 다운 받으실 수 있습니다.




ReverseCore


반응형
  1. 감염오리 2012.06.23 18:03

    ㅎㅎ 다시 포스팅을 올리시는군요
    앞으로도 더 많은 지식을 알려주시기 바랍니다^^

  2. ray 2012.06.27 04:50

    좋은 정보 감사합니다.

반응형

리버싱 기술을 조금 응용하면 다른 응용프로그램의 기능을 추가/변경시킬 수 있습니다. 


제가 애용하는 헥스 에디터 HxD.exe 에 필요한 기능을 살짝 추가하였습니다.



HxD.exe



DLL InjectionAPI Hooking 기술을 이용하여 HxD.exe 프로그램에 새로운 기능을 추가하였습니다.



제가 추가시킨 기능은 PE 파일 Offset 의 RVA 값을 계산해서 출력해 주는 것입니다. (위 그림 참고)


키보드나 마우스를 이용하여 커서 위치를 이동하면 Offset 값이 변함에 따라서 자동으로 그에 맞는 RVA 값이 계산되어 표시됩니다.



사용방법



HxD.exe  - Hex Editor

hxdhook.dll  - hooking dll

InjDll32.exe  - Injector

PEInfo.dll  - File Offset <->RVA converter



1. HxD.exe 실행


2. HxD 에서 아무 PE 파일을 오픈


3. InjDll32.exe 를 이용하여 HxD.exe 프로세스에 hxdhook.dll 을 인젝션





HxD.exe 프로세스에 hxdhook.dll 이 정상적으로 인젝션 되었다면 이제부터 프로그램 하단의 Status Bar 에 Offset 과 RVA 가 동시에 표시될 것입니다. 


크게 유용하다고 볼 수 는 없지만 리버싱 기술을 응용하여 기존 프로그램에 새로운 기능을 추가하는 방법을 잘 보여주는 예제라고 생각합니다. 필요하신 분께서는 자유롭게 가져다 쓰실 수 있습니다.



* 블로그에 리버싱 기술 응용편을 올리기 위해 준비한 간단한 시연입니다. 자세한 동작 원리, 후킹 과정, 모듈 개발 과정 등은 따로 포스팅 하도록 하겠습니다.



ReverseCore



반응형

'tool' 카테고리의 다른 글

PEView.exe  (21) 2013.01.27
HxD.exe 기능 추가!  (12) 2012.06.14
리버싱 현업에서 사용되는 디버거(Debugger)들  (33) 2010.09.29
InjDll.exe – DLL Injection/Ejection 전용 도구  (43) 2010.03.15
Process Explorer - 최고의 작업 관리자  (1) 2009.05.03
www.virustotal.com  (3) 2009.03.20
www.google.com  (2) 2009.03.06
  1. rgs 2012.06.14 19:13

    와 제가 댔글 처음인건가요 ?
    주인장님
    블로그 다시 시작하시는군요
    매일 들려보는 사람입니다.
    블로그 정말 재밋어요
    계속 열심히 해주세요

  2. 카이섹이 좋아 2012.06.14 20:33

    리버스 코어님 ㅠ ㅠ 언제 책이.....

  3. 감염오리 2012.06.15 00:44

    드디어!!! 포스팅 재개인가요^^

  4. 마리오 2012.06.15 10:25

    오호 포스팅 되었군요ㅎ
    책출판될거보다 포스팅된게 더 반가워요ㅎ

  5. db_click 2012.06.16 10:27

    항상 포스팅 감사히 보고 있습니다.

  6. reversecore 2012.06.23 00:52 신고

    관심 감사드립니다. ^^~

  7. Lr라 2013.03.04 14:47

    항상 포스팅 하신글 잘보고있습니다.
    음...~~~ 저걸 이용해서 헥스 만큼 바이트 채우고 시작되는 부분에 call로
    때려서 영역에서 불러와서 인라인 어셈으로 자동인젝션되도록 만들어야겟습니다 ㅎㅎ
    잘쓰겠습니다 ㅎㅎ

    • reversecore 2013.03.04 20:18 신고

      네, 좋은 시도 입니다.

      재밌게 작업하시고 잘 안되시면 질문 올려주세요~

      감사합니다.

  8. absolujin 2013.05.02 15:22

    전 이렇게 batch 파일 만들어서 사용하고 있어요.
    잘쓸께요. 감사합니다.
    --------------------------------------------------------------
    @echo off
    start Hxd.exe
    start InjDll32.exe HxD.exe -i hxdhook.dll

  9. yO Kang 2014.03.13 02:12 신고

    똑같이 했는데, 저는 "The token does not have the specified privilege" 이런 문구뜨면서 안되네요..
    뭐가 문제일까요?

    • windy21 2017.12.21 20:12

      관리자 권한으로 cmd 창을 띄우고 명령어를 입력해보세요!

  10. RBWSN 2016.02.25 06:36 신고

    안녕하세요 이 파일을 다운받아서 실행시켰는데
    저는 HxD에 RVA 주소값이 뜨지 않네요
    현재 64bit 윈10 운영체제를 사용중인데 책에 나온대로의 주소 및 comdlg32.dll의 값은 대문자로 되어있습니다.
    운영체제및 비트가 달라서 그런것일까요?

반응형


The New iPad 의 핵심은 레티나 디스플레이와 이를 잘 활용한 애플의 킬러 앱인 iWork(Pages, Numbers, Keynotes) 와 iLife(GarageBand, iMovie, iPhoto), 그리고 3rd party 제작사들의 수준 높은 앱 이라고 생각합니다. 특히 iWork 와 iLife 세트는 모두 구입해도 $45 밖에 안하면서 한번의 구매로 iPhone 과 iPad 를 동시에 지원하는 유니버셜 앱입니다. 꾸준한 업데이트로 새로운 기능도 추가되고요. 그리고 iCloud 를 이용하여 '여기서 하면 저기서도 되있고' 기능이 지원됩니다.

애플이 직접 제작한 iWork 와 iLife 의 데모를 보면 정말 감탄스러운게 철저히 초보 사용자 관점에서 설계되었다는 겁니다. 애플이 제작한 아이패드 앱 중에서 매뉴얼이 필요한 건 거의 없다고 보시면 됩니다. 너무 직관적이라서 누구나 쉽게 동영상을 편집하고 음악을 만들고 사진을 편집할 수 가 있습니다. SW 업종에 종사하는 제 눈에는 그런 점이 너무 신기하게만 보입니다. 간단한 GUI 를 제공하지만 어떤 프로그램보다도 더 고민하고 더 힘들게 만들었을 것 같다는 느낌이 들어요. 이런 수준 높은 SW 를 구동할 수 있는 테블릿이 아직까진 (근 미래에도) iPad 뿐입니다.

The New iPad 는 이러한 양질의 컨텐츠를 잘 돌릴 수 있도록 하드웨어가 설계되었습니다. 또한 이러한 양질의 컨텐츠는 하드웨어 판매의 견인차 역할을 톡톡히 합니다. 하드웨어와 소프트웨어가 서로 선순환 구조를 형성합니다. 현재로선 하드웨어와 소프트웨어를 동시에 잘 하는 회사는 애플이 유일한데, 자신의 장점을 아주 잘 살려서 전략적으로 앞서 나가고 있습니다. 따라서 당분간 테블릿(Post PC) 분야에서 iPad 는 넘사벽 지위를 몇 년간 더 유지할 것으로 생각됩니다.

참고로 Microsoft 창업주 빌 게이츠는 기회가 있을때마다 애플의 폐쇄적인 HW & SW 동시 구현 전략을 이상하다고 말하곤 했습니다. 실제로도 시장에서는 IBM 호환 PC에서 구동되는 Windows 가 승리하였습니다. 하지만 애플의 스티브 잡스는 끝까지 같은 전략을 밀어 부쳤습니다. 결국 뒤를 이은 MAC 의 디지털 허브 전략으로 인기를 얻고, 초대박 Post PC 전략으로 iOS 생태계를 완벽히 구축하면서 상황을 완전히 역전시키고 말았습니다. Post PC 전략의 핵심이 바로 폐쇄적인 하드웨어와 소프트웨어의 동시 구현입니다. 새로운 패러다임에서 경쟁자보다 훨씬 더 빠르게 움직이며 한번 잡은 승기를 놓치지 않고 오히려 경쟁자들과의 격차를 계속 벌리고 있습니다. 이게 다 하드웨어와 소프트웨어를 동시에 구현하는 능력이 있기 때문입니다. 

조만간 iPad 보다 하드웨어 성능이 더 좋은 안드로이드 테블릿들이 쏟아져 나올 것입니다. 하지만 iPad 수준의 편리한 소프트웨어 사용자 경험을 제공하지 못한다면 또 조용히 잊혀지겠지요? 즉, 하드웨어만 좋아서는 성공하지 못하고 소프트웨어도 같이 좋아야 한다는 의미입니다. 이처럼 소프트웨어와 컨텐츠의 위상이 점점 높아져 가는 모습을 보면서 저는 참 기분이 좋습니다.


ReverseCore

반응형
  1. 오곡 2012.03.09 06:40

    역시 수평적인 것이 성공하는군요;;

  2. 해표 2012.03.09 10:33

    리버싱 관련 자료를 찾다가 현재 주인장님 블로그 즐겨찾기 해놓은 1인입니다^^. 저도 매번 느끼는거지만 항상 스펙위주의 하드웨어만 존립하는 국내에선 SW의 중요함을 깨닫게 해주는 곳이 애플이라고 생각합니다. 스펙이 아무리 좋아도 그것을 빛내줄 SW가 없다면 쓸모 없는 기계뿐이고 껍데기뿐이것 같습니다. 예전 옴레기, 명텐도와 같이 기계만 만들었을 뿐 그것에 걸 맞는 컨텐츠가 없으니 기억속에 잊혀지고 반감만 생기게 되고 사용자가 정말 원하는게 먼지 문제의 본질을 깨닫지 못하는 국내 환경에선 애플은 사용자를 만족시켜줄 수 있고 카타르시스를 느끼게 해줄 수 있는 제품을 만든다는 것에는 틀림 없다고 생각해요.

  3. lanci3 2012.03.12 17:53

    오랜만에 들어왔더니 이런 놀라운 일이!!
    다시 블로그 활동 하신다니 정말 기쁘네요.

    블로그 내용이 너무 방대해서 어디부터 손대야할 지 막막했었지만,
    책이 출판되면 꼭!! 구입해서 익힐 예정입니다.

  4. 단골나그네 2012.03.20 09:54

    책구입하고싶은대요 언제쯤 나오나요..??

  5. 얼굴납작하고 남일 신경잘쓰는 곽경주 2012.03.24 19:53

    책나오면 사인 부탁드립니다ㅎㅎㅎ

  6. hare 2012.03.27 17:17

    책 기다리고 있습니다!

  7. 가피학성 허세 곽경주 2012.05.22 15:39

    책 언제 나오나 궁금하네요..

  8. ㅇㅇ 2012.05.26 16:30

    책 빨리 나와라 ㅠㅠ

반응형

간단한 진법 변환에 대해서 알아보겠습니다. 

아주 기초적면서도 중요한 내용입니다만, 블로그에 제대로 소개한적이 없어서 이번에 제대로 정리해보겠습니다. 

일반적인 사람이 사용하는 진법은 10진법입니다. 컴퓨터는 내부적으로 2진법을 사용합니다. 리버싱에서는 16진법을 사용합니다. 따라서 리버서는 이 세 가지 진법체계(2, 10, 16)를 자유자재로 변환할 줄 알아야 합니다.

보통은 계산기를 사용하면 편합니다만 2진수 <-> 16진수 변환 과정은 리버싱에 자주 등장하기 때문에 암산으로 가능하도록 숙달하는 것이 좋습니다. 




기본 진법

 
 진 법 숫 자 설 명   
 2 (Binary)  0, 1  ON, OFF 1111(2), 1111b
 10 (Decimal)  0 ~ 9  사람이 익숙한 숫자 체계 15(10), 15d
 16 (Hexadecimal)  0 ~ 9, A ~ F  2진법을 1/4로 줄여서 보여줌  F(16), Fh

* 참고

16진수는 2진수를 1/4로 압축시켜 보여주는 효과가 있습니다. 즉, 4 자리의 2진수가 1 자리의 16진수로 간단히 표현됩니다. 

예) 15(10) = 1111(2) = F(16)

 


 

변환 방법

학창시절에 배웠던 진법 변환 방법의 기억을 되살려 보겠습니다.

#1. 2진수 <-> 10진수 

1) 9(10) -> 1001(2)

2) 1001(2) ->  9(10)

3) 30(10) -> 11110(2)

4) 11110(2) ->  30(10) 

변환 방법은 매우 간단합니다. 기억이 새록새록 나시죠?  


#2. 10진수 <-> 16진수

1) 123(10) -> 7B(16)

 

 

2) 7B(16) -> 123(10)

 

 

 


3) 500(10) -> 1F4(16)


4) 1F4(16) -> 500(10) 

 

여기까지는 변환 원리만 기억하시고 실제로는 계산기를 사용하시는것이 편리합니다.

리버서에게 중요한 것은 아래의 2진수 <-> 16진수 변환을 암산(수작업)으로 해내는 능력입니다.

 

#3. 2진수 <-> 16진수

 

 

 

<2진수 테이블>

 

위 테이블에서는 1 ~ 15 까지의 숫자를 각각 10, 16, 2 진수로 보여주고 있습니다. 

눈여겨 보실 내용은

4 자리의 2 진수를 1 자리의 16진수로 표현 가능

하다는 것입니다.
'4 자리의 2 진수' 라는 말은 4 bit 라고 바꿔 말 할 수 있고, 8 bit(1 byte) 는 '8 자리의 2 진수' 이며 이는 2 자리의 16 진수입니다.

즉, 1 byte 는 2 자리의 16 진수로 간단히 표현(00 ~ FF)이 가능하다는 뜻입니다. 이런 특성 때문에 컴퓨터 공학에서는 16진수로 숫자를 표현하는 것이 편리합니다. (1 byte 로 저장할 수 있는 숫자를 10 진수로 표현하면 0 ~ 255 이며 세 자리수가 필요합니다.)

위의 테이블을 다 외우시면 물론 좋습니다만 처음에는 빨간색으로 표시한 2(0010), 4(0100), 8(1000), A(1010), C(1100)만 외우셔도 됩니다. 파란색으로 표시한 1(0001), F(1111)는 간단하니까 한번 보면 저절로 외워지고요. 나머지 숫자는 빨간색 숫자에서 계산하시면 됩니다. 계산 방법은 아래와 같습니다.


3(0011) = 2(0010) + 1(0001)
5(0101) = 4(0100) + 1(0001) 
6(0110) = 4(0100) + 2(0010)
7(0111) = 8(1000) - 1(0001)
9(1001) = 
8(1000) + 1(0001)
B(1011) = A(1010) + 1(0001)

D(1101) = C(1100) + 1(0001)
E(1110) = F(1111) - 1(0001) 

간단한 예제를 살펴보겠습니다.

변환 요령은 "16진수는 한 자리씩 끊고, 2진수는 네 자리씩 끊는다" 입니다. 그리고 위 테이블을 보면서 변환하시면 됩니다. (조금만 숙달되도 암산으로 가능해 집니다.)  

 

1) 7F(16) -> 01111111(2)

2) 3D6A921E(16) -> 00111101 01101010 10010010 00011110(2)

3) 10101100(2) -> AC(16)


 

진법 변환 활용

 
이러한 16진수 <-> 2진수 진법 변환을 왜 공부해야 할까요?

리버싱 분야에서 다양한 활용 예가 있습니다.

IA32 Instruction Table 을 해석을 위해 ModR/M, SIB, Group ID 등을 계산할 때 필요합니다.

<그림 - IA32 Instruction Format : 출처 Intel Manual>

 

<그림 - ModR/M Byte : 출처 Intel Manual>


EFLAGS 레지스터는 각 bit 가 flag 를 의미합니다. 이러한 bit flag 연산에 진법 변환이 필요합니다.

 <그림 - EFLAGS : 출처 Intel Manual> 
 Win32 API 의 파라미터 중에 Flag 를 bit 로 표시하는 경우가 많습니다.

 

HANDLE WINAPI CreateFile(

  __in      LPCTSTR lpFileName,

  __in      DWORD dwDesiredAccess,

  __in      DWORD dwShareMode,

  __in_opt  LPSECURITY_ATTRIBUTES lpSecurityAttributes,

  __in      DWORD dwCreationDisposition,

  __in      DWORD dwFlagsAndAttributes,

  __in_opt  HANDLE hTemplateFile

);


* 출처 : MSDN

 

CreateFile() API 의 6 번째 파라미터 dwFlagsAndAttributes 는 아래와 같이 bit flag 로 이루어져 있습니다.

<그림 -  dwFlagsAndAttributes 설명 일부 : 출처 MSDN>  


이외에도 디버깅을 하다보면 각종 bit 연산이 나타나는데 16진수 <-> 2진수 변환 방법을 알고 있으면 코드를 이해하는데 크게 도움이 됩니다.

지금까지 매우 기초적이면서도 중요한 진법 변환에 대하여 알아보았습니다. 잘 활용하시기 바랍니다.

개인적으로 백만년 만의 포스팅이네요. 이 포스팅을 시작으로 블로그 활동을 재개합니다. ^^~

* 얼마전 회사를 떠나서... 사회에 첫 발을 내디딘... 혹은 학교로 복귀한... 15기 인턴들 모두 화이팅~~~

 

ReverseCore

반응형
  1. 2012.03.06 08:52

    비밀댓글입니다

  2. 2012.03.06 09:30

    잘봤습니다 ^^*

  3. 2012.03.06 17:07

    해쿨을 통해 오게되엇는데,
    딱 오늘 문제 풀면서 다시 생각해보게된 진법이네요 ..ㅎ
    알바 시작하면서 일이업어 공부를 다시 시작하게되었는데.
    많은 포스팅 부탁드려요 ㅋ
    잘봣습니당.ㅎ

  4. 투게더 2012.03.06 22:07

    블로그를 통해 배우고 있는 학생입니다
    책이 출판되기를 목빠지게 기다리고 있습니다ㅎ
    3월달 안에 나오겠지요?

    • reversecore 2012.03.06 23:37 신고

      책은 출판사에서 열심히 작업중입니다.

      아마 여름쯤 나올것 같습니다.

      감사합니다. ^^~

  5. hcscp 2012.03.07 09:45

    다시 포스팅 하시는군요 ㅎ
    매번 기억 상기시킬겸 많은 도움됩니다.
    여름쯤 책 출판시 바로 구매하고 싶네요 ㅎ
    감사합니다. 수고하세요:>

  6. 9rand 2012.03.07 13:52

    다시 글을 써주신다니 감사합니다.. 15기는 무엇..

  7. 궁금 2012.03.08 00:26

    ModR/M, SIB, Group ID 변환하는게 잘 이해가 되지 않습니다.
    이게 전공책을 봐도 잘 이해가 안 되는 부분인데
    어떻게 쓰이는지 자세한 예를 좀 알 수 있을까요?
    감사합니다.

    • reversecore 2012.03.09 00:41 신고

      안녕하세요.

      저 애들은 모두 IA32 Instruction 을 해석할 때 사용됩니다. ModR/M, SIB 는 각각 1 byte 크기이며 이걸 bit 단위로 3 등분으로 쪼개서 사용됩니다. 인텔 매뉴얼에서 제공되는 테이블 보는 방법이랑 Instruction 해석하는 방법을 배우시면 됩니다. (GroupID 는 ModR/M 을 같이 사용합니다.)

      IA32 Instruction 해석 방법은 제가 쓴 책에는 포함되어 있는데, 블로그에는 그 내용이 없습니다. 다른 사이트에서 정보를 얻으시는 것이 좋을 것 같습니다.

      인텔 매뉴얼을 직접 보시고 공부하셔도 됩니다만 너무 방대하고 혼자 익히려면 시간도 많이 걸립니다. 제가 신규직원들을 가르쳐보니 한시간이면 곧 잘 하더군요. 그런데 정작 제가 혼자 공부할 때는 1주일이 걸렸었습니다.

      감사합니다.

  8. letmeln 2012.03.09 00:58

    책은 언제쯤 나오나요.. 기다리고 있습니다만..

  9. 모리 2012.03.13 11:39

    자료 감사해요

  10. windofme 2012.03.14 04:50

    몇년전에 패커 때문에 들락 거리면서 이것 저것 주워 보고 하면서 블로그를 헤짚고 다녔었는데 오랜만에 다시 방문해서 다시보니 항상 새롭습니다.

    요것 조것 보고 배운덕분에 취직도 하고 밥벌이로 삼을 기술이 되어 버렸네요
    감사하다는 글 한편 남기고 싶어서 한자 적고 가겠습니다.

    언제 한번 궁금한거 한보따리랑 소주나 싸들고 한번 뵙고 싶네요 ㅎㅎ

    계속 좋은글 부탁드립니다.

  11. 감염오리 2012.03.16 23:46

    오랜만의 포스팅이네요^^
    최근들어 학교 공부(저는 중학생이라서요 ㅠㅜ)에 매진하고, JAVA언어가 끌려서 공부하는 중인데...
    하아... 리버싱을 최근 2달동안 거의 안해본 것 같습니다... 흥미도 떨어진 것 같고... 어떠한 문제가 주어졌을 때 그 문제를 해결할때 느끼는 성취감으로 약 7개월 정도 했었습니다만, 어느 정도의 시기가 되니, 제가 풀기에는 너무 쉽거나(이미 풀어본 것들 말이죠^^) 너무 어려운 것들만 있어서...
    조언 부탁드려도 될까요??? 리버싱을 어떻게 해 나아가야 할지...ㅠㅜ

  12. 2012.06.19 07:56

    비밀댓글입니다

  13. 학생 2012.10.18 02:54

    안녕하십니까 ^.^

    저는 공학생입니다..ㅎㅎ 제가 진법변환에관한 부분을듣고있고 저만의 교재를만드는데 여기서본내용을 인용해도될런지요 ?^^ 상업적으로 사용하는게아니라 제가 교재로만들어 보관하고 읽고 하려고하는데 괜찬을까요 이런말드리는게 부담스러울지 걱정되네요

    • reversecore 2012.10.19 01:31 신고

      안녕하세요.

      먼저 질문을 해주셔서 감사합니다.

      개인적으로 혼자면 보시고 쓰실 거라면 전부 인용하셔도 좋습니다.

      혹시 다른 사람에게 전달하실 예정이라면 출처만 밝혀주시면 감사하겠습니다. ^^~

  14. 학생 2012.11.07 21:03

    참고하고갑니다. 감사합니다.

  15. 여기다써도될지.. 2013.06.22 01:21

    크랙미와 키젠미를 풀고 언팩미를 푸는도중
    Themida 로 패킹한 프로그램중 디버거를 감지하여 프로그램자체가 실행이되지않는경우는
    올리디버거 플러그인 옵션을 사용하라는데 64비트에서는 ollydbg200 플러그인이 사용안되는가요?

+ Recent posts