사이트 내 전체검색
검색목록
Norton Anywhere 크랙하기
로빈아빠
https://cmd.kr/server/893 URL이 복사되었습니다.

본문

Norton Anywhere ver 8.0 Cracking
Tools required

Soft-Ice 3.2 ( 3.2 이후의 어떤버전이든 상관없음.)
W32Dasm (any version should do, 8.93버전을 사용하면 더욱 좋음.)
An hexeditor ( 나는 UltraEdit 6.00a를  사용함. 어떤 거든지 상관없음, 본인이 쓰기에 편하기만 하면 됨.)

Target

PcAnywhere ver 8.0
Name : Winaw32.exe        Size :  664,576 Bytes
Name : Awcomm32.dll        Size :  128,512 Bytes
Program Location :
 1. 통신망에 가면, 한국 Symantec에서 Trial버전을 배포하고 있음. 천리안은 go norton..
 2. 개인적으로 용산전자상가의 프로그램 판매장에 들러서, 아가씨에게 Trial버전을 달라고 사정하면
    CD를 얻을 수 있음. 아가씨를 잘 구슬르지 못하면, 포기하기 바람....

About this Protection system

한글판 PcAnywhere ver 8.0은 전형적인 30일 Trial Protection을 가지고 있습니다. 제가 확인한 바로는 미국꺼랑은 Protection이 틀립니다. 미국꺼는 무지 어렵게 되어 있는데.... 한국 노턴의 프로그래밍 실력이 별로라는 것을 보여주는 것입니다.
모든 비밀은 Awcomm32.dll 안에 들어 있습니다.

The Crack Essay

먼저 프로그램을 실행시키면, 등록라이선스 동의화면이 나옵니다. 이 때 Ctrl+D를 눌러서 소프트아이스를 불러낸 뒤, 명령어
          hwnd
라고 치면, 다음과 같은 Text들이 나열되는 것이 보일 것입니다.
여기 출력되는 값은 컴퓨터마다 또한 실행할 때마다 틀립니다.

Window-Handle
hQueue
SZ
QOwner
Class-Name
Window-Procedure
0080 (0)
2057
32
MSGSVR32
#32711 (switch_win)
17EF:00004B6E
0084 (1)
2057
32
EXPLORER
shell_trayWnd
1487:0000016C
........







Enter키를 누르면, 한 줄씩 넘어가고, Space키를 누르면 명령어블럭의 한 화면씩 넘어갑니다.  QOWNER[Program Name] 에 주의하면서,
Space키를 눌러가다 보면은 다음과 같은 부분이 보일 것입니다.



Window-Handle
hQueue
SZ
QOwner
Class-Name
Window-Procedure
0C18(1)
1A6F
32
WINAW32
IMEKR98U_MAIN
137F:0000012A
0B94 (1)
1A6F
32
WINAW32
IME
176F:00000000
0B9C (1)
1A6F
32
WINAW32
#32770 (Dialog)
1487:0000104A
  0BA0 (2)
1A6F
32
WINAW32
Button
176F:000035CC
  0BA4 (2)
1A6F
32
WINAW32
Button
176F:000035CC
  0BA8 (2)
1A6F
32
WINAW32
Button
176F:000035CC
  0BAC (2)
1A6F
32
WINAW32
Static
176F:0000828E
  0BAF (2)
1A6F
32
WINAW32
Static
176F:0000828E
............







우리가 원하는 내용이 보였습니다. 바로 QOwner 가  WINAW32  이고,  Class-Name이    #32770 (Dialog)  이며,    Window-Handle이  0B9C  입니다. 그러나, 위 표에 보이는 값은 어디까지나 제 컴에서 실행했을 때 값입니다. 여러분은 여러분이 실행한 컴퓨터에서의 값을 기억해야 합니다.
우리가 추적을 원하는 메시지박스의 Window-Handle를 알아냈으므로,  우리는 BMSG command를 이용할 것입니다.
BMSG 는 메시지 브레이크를 거는 것입니다.
소프트아이스 명령윈도우에서 다음과 같이 칩니다.
  BMSG          0B9C              WM_DESTROY
다시 한번 말하지만, Window-Handle값    0B9C  는 여러분 컴퓨터에서 출력된 값을 써야 합니다.
그리고, 다른 브레이크포인트는 다 해제하십시오. 준비가 되었습니까??
그러면, Ctrl+D를 눌러서 프로그램을 실행시키고, 버튼을 누르면.....
짤까닥! 브레이크가 걸립니다. 여러분은 아마  USER.DLL 내부에 있을 것입니다. 정확히 얘기하면 DestroyWindow 함수입니다. 여기서 F12키를 천천히 누르면서, Awcomm32.dll 코드내부로 들어갑니다. ( 어떻게 Awcomm32.dll 코드내부인지를 아느냐면은 주소번지가 xxxx:0669Exxx 식입니다. W32Dasm 으로 disassemble 해보면 압니다. ) 바로 다음과 같은 부분입니다.

:0669E122 E8B92D0000              Call 066A0EE0
:0669E127 898538F1FFFF            mov dword ptr [ebp+FFFFF138], eax  <---- 우리가 도달한 곳
:0669E12D E9F1000000              jmp 0669E223
아하! 그렇습니다. 주소번지:0669E122 의  Call 066A0EE0 은 등록라이선스 동의화면을 띄우는 함수 CALL입니다. 자 이곳으로 오는 점프를 찾읍시다.
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0669E090(C)
|
:0669E0FB 837D0800                cmp dword ptr [ebp+08], 00000000
:0669E0FF 0F844B010000            je 0669E250  <---- 등록라이선스 동의화면 그리기를 뛰어넘는 점프
:0669E105 FFB510F7FFFF            push dword ptr [ebp+FFFFF710]
:0669E10B 6A00                    push 00000000
:0669E10D 8D8D60F2FFFF            lea ecx, dword ptr [ebp+FFFFF260]
:0669E113 E8E50A0000              call 0669EBFD
:0669E118 C645FC0B                mov [ebp-04], 0B
:0669E11C 8D8D60F2FFFF            lea ecx, dword ptr [ebp+FFFFF260]

* Reference To: MFC42.Ordinal:09D2, Ord:09D2h
                                |
:0669E122 E8B92D0000              Call 066A0EE0  <---- 등록라이선스 동의 화면 그리기
:0669E127 898538F1FFFF            mov dword ptr [ebp+FFFFF138], eax  <---- 우리가 도달한 곳
:0669E12D E9F1000000              jmp 0669E223
바로 있습니다. 주소번지 :0669E0FF 의  je 0669E250 점프입니다. 여기서 무조건 점프를 하면 등록라이선스 동의화면은 나오지 않을 것입니다.

어떻게 하느냐면,
:0669E0FF 0F844B010000            je 0669E250 를

:0669E0FF E94C010000              jmp 0669E250
:0669E104  90                      nop          로 바꿉니다.  [ Offset은 D4FFh ]



여러분, 30일동안은 등록라이선스 동의화면이 없어서 좋았겠지만, 30일이 지나면, 사용기간이 만료됬다는 Nag화면이 뜹니다. 그리고는, 영원히 프로그램을 볼 수 없을지도 모릅니다. 어허, 전에 크랙한 화면이랑 비슷하지만, 버튼이 하나밖에 없습니다. 걱정하지 마세요. 저번이랑 똑같이 크랙하면 됩니다.
프로그램을 실행시키고, 사용기간 만료화면이 나옵니다. 이 때 Ctrl+D를 눌러서 소프트아이스를 불러낸 뒤, 명령어
          hwnd
라고 치고, 우리가 원하는 부분까지 Space키를 누르면 다음과 같이 보일 것입니다.

Window-Handle
hQueue
SZ
QOwner
Class-Name
Window-Procedure
0F54(1)
1A6F
32
WINAW32
IMEKR98U_MAIN
137F:0000012A
0174 (1)
1A6F
32
WINAW32
IME
176F:00000000
0F48 (1)
1A6F
32
WINAW32
#32770 (Dialog)
19CF:0000072E
  0F50 (2)
1A6F
32
WINAW32
Button
176F:000035CC
  0F60 (2)
1A6F
32
WINAW32
Static
176F:0000828E
  0F5C (2)
1A6F
32
WINAW32
Static
176F:0000828E
  0F64 (2)
1A6F
32
WINAW32
Static
176F:0000828E
............







우리가 원하는 내용이 보였습니다. 바로 QOwner 가  WINAW32  이고,  Class-Name이    #32770 (Dialog)  이며,    Window-Handle이  0F48  입니다. 그러나, 위 표에 보이는 값은 어디까지나 제 컴에서 실행했을 때 값입니다. 여러분은 여러분이 실행한 컴퓨터에서의 값을 기억해야 합니다.
소프트아이스 명령윈도우에서 다음과 같이 칩니다.
  BMSG    0F48  WM_DESTROY
다시 한번 말하지만, Window-Handle값  0F48  는 여러분 컴퓨터에서 출력된 값을 써야 합니다.
그리고, 다른 브레이크포인트는 다 해제하십시오. 준비가 되었습니까??
그러면, Ctrl+D를 눌러서 프로그램을 실행시키고, 버튼을 누르면.....
짤까닥! 브레이크가 걸립니다. 여러분은 아마  USER.DLL 내부에 있을 것입니다. 정확히 얘기하면 DestroyWindow 함수입니다. 여기서 F12키를 천천히 누르면서, Awcomm32.dll 코드내부로 들어갑니다. ( 어떻게 Awcomm32.dll 코드내부인지를 아느냐면은 주소번지가 xxxx:0669Exxx 식입니다. W32Dasm 으로 disassemble 해보면 압니다. )  바로 다음과 같은 부분입니다.

:0669E01C E8BF2E0000              Call 066A0EE0    <---- 사용기간 만료화면 그리기 CALL
:0669E021 C78568F1FFFF00000000    mov dword ptr [ebp+FFFFF168], 00000000  <---- 우리가 도달한 곳

아하! 또 찾았습니다. 윗부분의 점프를 찾으면.

0669DFFD 85C0                    test eax, eax
:0669DFFF 0F8558000000            jne 0669E05D        <--- 여기서 점프를 해야만 한다.
:0669E005 6A00                    push 00000000
:0669E007 8D8D28F3FFFF            lea ecx, dword ptr [ebp+FFFFF328]
:0669E00D E8BF070000              call 0669E7D1
:0669E012 C645FC09                mov [ebp-04], 09
:0669E016 8D8D28F3FFFF            lea ecx, dword ptr [ebp+FFFFF328]

* Reference To: MFC42.Ordinal:09D2, Ord:09D2h
                                |
:0669E01C E8BF2E0000              Call 066A0EE0    <---- 사용기간 만료화면 그리기 CALL
:0669E021 C78568F1FFFF00000000    mov dword ptr [ebp+FFFFF168], 00000000

주소번지 :0669DFFF 의 jne 0669E05D 점프를 크랙하면 되겠지요.
~라고만 생각하면 오산입니다. 결과를 미리 얘기하면, 이 사용기간 만료화면을 그리는 부분은 이 곳을 포함해서 총 세군데입니다.
이것을 알아내는 데 많은 시행착오를 거쳤는데, 잘 보면 다 뻔히 보이는 것는데....
자!! 보시죠.....

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0669E356(C)
|
:0669DFF2 8D8D14F7FFFF            lea ecx, dword ptr [ebp+FFFFF714]
:0669DFF8 E8C5550000              call 066A35C2
:0669DFFD 85C0                    test eax, eax
:0669DFFF 0F8558000000            jne 0669E05D        <--- 여기서 점프를 해야만 한다.
          <--- 이 밑에  사용기간 만료 화면을 띄우는 부분이 있다.
:0669E005 6A00                    push 00000000
:0669E007 8D8D28F3FFFF            lea ecx, dword ptr [ebp+FFFFF328]
:0669E00D E8BF070000              call 0669E7D1
:0669E012 C645FC09                mov [ebp-04], 09
:0669E016 8D8D28F3FFFF            lea ecx, dword ptr [ebp+FFFFF328]

* Reference To: MFC42.Ordinal:09D2, Ord:09D2h
                                |
:0669E01C E8BF2E0000              Call 066A0EE0    <---- 사용기간 만료화면 그리기 CALL
:0669E021 C78568F1FFFF00000000    mov dword ptr [ebp+FFFFF168], 00000000
:0669E02B C645FC02                mov [ebp-04], 02
:0669E02F E8CE030000              call 0669E402
:0669E034 C645FC01                mov [ebp-04], 01
:0669E038 E819040000              call 0669E456
:0669E03D C645FC00                mov [ebp-04], 00
:0669E041 E81C040000              call 0669E462
:0669E046 C745FCFFFFFFFF          mov [ebp-04], FFFFFFFF
:0669E04D E81C040000              call 0669E46E
:0669E052 8B8568F1FFFF            mov eax, dword ptr [ebp+FFFFF168]
:0669E058 E927040000              jmp 0669E484

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0669DFFF(C)      <--- 여기로 점프가 도달한다.
|
:0669E05D 8D8D38F7FFFF            lea ecx, dword ptr [ebp+FFFFF738]
:0669E063 E867040000              call 0669E4CF
:0669E068 50                      push eax
:0669E069 8D8D14F7FFFF            lea ecx, dword ptr [ebp+FFFFF714]
:0669E06F E84E550000              call 066A35C2
:0669E074 50                      push eax
:0669E075 FFB534F7FFFF            push dword ptr [ebp+FFFFF734]
:0669E07B E8AC5A0000              call 066A3B2C
:0669E080 83C40C                  add esp, 0000000C
:0669E083 898510F7FFFF            mov dword ptr [ebp+FFFFF710], eax
:0669E089 83BD10F7FFFF00          cmp dword ptr [ebp+FFFFF710], 00000000
:0669E090 0F8565000000            jne 0669E0FB    <--- 여기서 점프를 해야만 한다.
          <--- 이 밑에  사용기간 만료 화면을 띄우는 부분이 있다.
:0669E096 6A00                    push 00000000
:0669E098 8D8D14F7FFFF            lea ecx, dword ptr [ebp+FFFFF714]
:0669E09E E85A550000              call 066A35FD
:0669E0A3 6A00                    push 00000000
:0669E0A5 8D8DC8F2FFFF            lea ecx, dword ptr [ebp+FFFFF2C8]
:0669E0AB E821070000              call 0669E7D1
:0669E0B0 C645FC0A                mov [ebp-04], 0A
:0669E0B4 8D8DC8F2FFFF            lea ecx, dword ptr [ebp+FFFFF2C8]

* Reference To: MFC42.Ordinal:09D2, Ord:09D2h
                                |
:0669E0BA E8212E0000              Call 066A0EE0    <---- 사용기간 만료화면 그리기 CALL
:0669E0BF C78564F1FFFF00000000    mov dword ptr [ebp+FFFFF164], 00000000
:0669E0C9 C645FC02                mov [ebp-04], 02
:0669E0CD E824030000              call 0669E3F6
:0669E0D2 C645FC01                mov [ebp-04], 01
:0669E0D6 E87B030000              call 0669E456
:0669E0DB C645FC00                mov [ebp-04], 00
:0669E0DF E87E030000              call 0669E462
:0669E0E4 C745FCFFFFFFFF          mov [ebp-04], FFFFFFFF
:0669E0EB E87E030000              call 0669E46E
:0669E0F0 8B8564F1FFFF            mov eax, dword ptr [ebp+FFFFF164]
:0669E0F6 E989030000              jmp 0669E484

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0669E090(C)      <--- 여기로 점프가 도달한다.
|
:0669E0FB 837D0800                cmp dword ptr [ebp+08], 00000000
:0669E0FF 0F844B010000            je 0669E250    <--- 여기서 점프를 해야만 한다.
:0669E105 FFB510F7FFFF            push dword ptr [ebp+FFFFF710]
:0669E10B 6A00                    push 00000000
:0669E10D 8D8D60F2FFFF            lea ecx, dword ptr [ebp+FFFFF260]
:0669E113 E8E50A0000              call 0669EBFD
:0669E118 C645FC0B                mov [ebp-04], 0B
:0669E11C 8D8D60F2FFFF            lea ecx, dword ptr [ebp+FFFFF260]

* Reference To: MFC42.Ordinal:09D2, Ord:09D2h
                                |
:0669E122 E8B92D0000              Call 066A0EE0    <---- 등록라이선스 동의화면 그리기 CALL
:0669E127 898538F1FFFF            mov dword ptr [ebp+FFFFF138], eax
:0669E12D E9F1000000              jmp 0669E223

주소번지 :0669E0FF 의  je 0669E250 점프에서 무조건 점프시키면 다른 곳에서 좀 놀다가 다시 다음으로 또 옵니다.

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0669E22A(C)
|
:0669E132 83BD10F7FFFF05          cmp dword ptr [ebp+FFFFF710], 00000005
:0669E139 0F8F2B000000            jg 0669E16A    <--- 여기서 점프를 해야만 한다.
              <--- 이 밑에 사용기간 만료화면을 띄우는 부분이 있다.
:0669E13F FFB510F7FFFF            push dword ptr [ebp+FFFFF710]
:0669E145 6A00                    push 00000000
:0669E147 8D8DF8F1FFFF            lea ecx, dword ptr [ebp+FFFFF1F8]
:0669E14D E83C0D0000              call 0669EE8E
:0669E152 C645FC0C                mov [ebp-04], 0C
:0669E156 8D8DF8F1FFFF            lea ecx, dword ptr [ebp+FFFFF1F8]

* Reference To: MFC42.Ordinal:09D2, Ord:09D2h
                                |
:0669E15C E87F2D0000              Call 066A0EE0    <---- 사용기간 만료화면 그리기 CALL
:0669E161 C645FC0B                mov [ebp-04], 0B
:0669E165 E874020000              call 0669E3DE

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0669E139(C)
|
:0669E16A C78560F1FFFF01000000    mov dword ptr [ebp+FFFFF160], 00000001
:0669E174 C645FC02                mov [ebp-04], 02
:0669E178 E86D020000              call 0669E3EA
:0669E17D C645FC01                mov [ebp-04], 01
:0669E181 E8D0020000              call 0669E456
:0669E186 C645FC00                mov [ebp-04], 00
:0669E18A E8D3020000              call 0669E462
:0669E18F C745FCFFFFFFFF          mov [ebp-04], FFFFFFFF
:0669E196 E8D3020000              call 0669E46E
:0669E19B 8B8560F1FFFF            mov eax, dword ptr [ebp+FFFFF160]
:0669E1A1 E9DE020000              jmp 0669E484

잘 보셨나요?? 총 네군데가 고쳐져야 합니다. 먼저 두 번의 사용기간 만료 검사를 실시하고, 등록라이선스 동의를 했는지 확인하고, 또다시 사용기간 만료를 검사합니다. CALL들을 보면 주소가 다 똑같지 않습니까?  “ Call 066A0EE0 ”입니다.
마지막의 사용기간 만료 검사는 제 경우에는 동작하지 않았습니다. 항시 점프가 되던데... 그래도 무시하면 안되지요.





완벽한 크랙을 하려면, 네 부분을 모두 고친다.
먼저,
:0669DFFF 0F8558000000            jne 0669E05D 를

:0669DFFF 0F8458000000            je  0669E05D
 또는, 안전하게
:0669DFFF EB5C                    jmp 0669E05D
:0669E001  F7D8                    neg eax
:0669E003  F7D8                    neg eax        로 고친다. [ Offset은 D3FFh ]

두번째,
:0669E090 0F8565000000            jne 0669E0FB를

:0669E090 0F8465000000            je 0669E0FB
 또는, 안전하게
:0669E090 EB69                    jmp 0669E0FB
:0669E092 F7D8                    neg eax
:0669E094 F7D8                    neg eax        로 고친다. [ Offset은 D490h ]

세 번째, 이미 설명한 대로

:0669E0FF 0F844B010000            je 0669E250 를

:0669E0FF E94C010000              jmp 0669E250
:0669E104  90                      nop          로 바꿉니다.  [ Offset은 D4FFh ]

네 번째,

:0669E139 0F8F2B000000            jg 0669E16A 를
:0669E139 EB2F                    jmp 0669E16A
:0669E13B F7D8                    neg eax
:0669E13D F7D8                    neg eax      로 바꿉니다.  [ Offset은 D539h ]

이렇게 하면, 한글판 노턴 피씨애니훼얼??의 옷을 다 벗긴 것입니다.
하! 하! 하!






개봉박두!!! 완벽한 신기술~~~~~!!!!!

네 군데의 스물여덟 BYTE ! 너무 힘겹습니까?
한방에 모두 끝내는 법을 가르쳐 드리지요..

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0669E356(C)
|
:0669DFF2 8D8D14F7FFFF            lea ecx, dword ptr [ebp+FFFFF714]
:0669DFF8 E8C5550000              call 066A35C2
:0669DFFD 85C0                    test eax, eax
:0669DFFF 0F8558000000            jne 0669E05D

앞에서 크랙한 부분의 위로 올라가다 보면은, 점프가 있습니다. 그 곳으로 가보면,

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0669DFED(U)
|
:0669E342 83BD3CF1FFFFFF          cmp dword ptr [ebp+FFFFF13C], FFFFFFFF
:0669E349 0F8496FFFFFF            je 0669E2E5
:0669E34F 83BD3CF1FFFF00          cmp dword ptr [ebp+FFFFF13C], 00000000
:0669E356 0F8496FCFFFF            je 0669DFF2
:0669E35C 83BD3CF1FFFF01          cmp dword ptr [ebp+FFFFF13C], 00000001
:0669E363 0F841FFFFFFF            je 0669E288
:0669E369 E900000000              jmp 0669E36E

바로 찾은 것 같다는 생각이 후두부를 치고 지나가고 있지 않습니까????
주소 [ebp+FFFFF13C] 에 날짜제한에 관한 정보로 값 0과 1로 저장하고 있음.
주소 :0669E356에서 점프를 하면은, 제한에 관한 모든 체크가 이루어지게 되므로, 당연히 여기서 점프가 안되고, 주소:0669E363에서 점프가 되어야 정상적인 실행이 됩니다.

크랙은
:0669E356 0F8496FCFFFF            je 0669DFF2를
:0669E356 0F842CFFFFFF            je 0669E288 로 고친다. [ Offset은 D758h ]
이렇게 하면, 제한이 되건 안되건 상관없이 정상적인 실행루틴으로 가서 동작합니다.


퀴즈??????
W32Dasm 으로 Awcomm32.dll을 Disassemble 해보면, 첫부분 EXPORTED FUNCTIONS 부분에 다음과 같은 내용이 보입니다.
Addr:06695518 Ord: 196 (00C4h) Name: _StrReplace@12
Addr:0669D910 Ord: 197 (00C5h) Name: _TimeBombCheck@4
Addr:066979F6 Ord: 198 (00C6h) Name: _TimedDspErr@24
_TimeBombCheck 라~~~, 함수 이름치고는 너무 리얼합니다.
각성하시오. 
한국노턴 프로그램관계자 여러분~~~~~~~!!!!!


♤  성가시게 구는 Nag 화면 없애기  ♤
프로그램 실행때마다 제일 먼저 등장해서 “PcAnywhere ver 8.0” 라고 그려지는 녀석을 없애보기로 합시다. 먼저 bpx Updatewindow로 브포를 잡고, 프로그램을 실행하면은 바로 소프트아이스가 뜹니다.
(※ 소프트아이스에서 bpx Updatewindow 명령을 준 뒤에 윈도우로 돌아오면은 가만이 있어도 브레이크가 계속 걸립니다. 왜냐면,  Updatewindow함수는 화면을 갱신하는 것으로서 윈도우 운영체제는 계속해서 화면을 갱신하고 있기 때문입니다. 자! 어떻게 하면 우리가 원하는 Updatewindow함수에 브레이크를 걸 수 있을까요??? 먼저 윈도우 데스크탑에 Winaw32.exe의 단축키를 만듭니다. 그리고, 윈도우상의 다른 프로그램들을 다 종료시킵니다. 특히, 시계 프로그램 같은 것은 더더욱 종료시켜야 합니다. 다 종료시켰으면, 마우스로 윈도우 데스크탑의 빈 부분을 한 번 꼭 찍어주고 나서, 다음에 Winaw32.exe의 단축키를 마우스로 꼭 한번 찍어줍니다. 그러면, Winaw32.exe의 단축키가 색깔이 반전됩니다. 준비가 다 되었습니다. Ctrl+D 키를 눌러서 소프트아이스를 불러낸 뒤, 명령어 bpx Updatewindow를 친 뒤에 다시 Ctrl+D 키를 눌러서 윈도우 화면으로 돌아오면 Winaw32.exe의 단축키가 색깔이 반전된 채 기다리고 있지요. 이 때에 빨리 Enter키를 눌러주면 바로 우리가 원하는 Updatewindow함수에 브레이크를 걸립니다. 윈도우 화면에 그림이 그려질려고 하는 모양이 보이시지요.)
F11 키를 한번 눌러주면은 Winaw32.exe 파일안에서 다음과 같은 코드를 볼 수 있습니다.

* Referenced by a CALL at Address:
|:00406EAA 
|
:00407485 B83A754000              mov eax, 0040753A

* Reference To: MSVCRT._EH_prolog, Ord:0042h
                                |
:0040748A E835B80300              Call 00442CC4
:0040748F 83EC10                  sub esp, 00000010
:00407492 53                      push ebx
:00407493 56                      push esi
:00407494 57                      push edi
:00407495 894DE4                  mov dword ptr [ebp-1C], ecx

* Possible Reference to Dialog: DialogID_7801, CONTROL_ID:0064, ""
                                |
:00407498 6A64                    push 00000064

* Reference To: MFC42.Ordinal:0337, Ord:0337h
                                |
:0040749A E8FB3B0000              Call 0040B09A
:0040749F 83C404                  add esp, 00000004
:004074A2 8945F0                  mov dword ptr [ebp-10], eax
:004074A5 E900000000              jmp 004074AA

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004074A5(U)
|
:004074AA C745FC00000000          mov [ebp-04], 00000000
:004074B1 837DF000                cmp dword ptr [ebp-10], 00000000
:004074B5 0F8410000000            je 004074CB
:004074BB 8B4DF0                  mov ecx, dword ptr [ebp-10]
:004074BE E830120000              call 004086F3
:004074C3 8945EC                  mov dword ptr [ebp-14], eax
:004074C6 E907000000              jmp 004074D2

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004074B5(C)
|
:004074CB C745EC00000000          mov [ebp-14], 00000000

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004074C6(U)
|
:004074D2 C745FCFFFFFFFF          mov [ebp-04], FFFFFFFF
:004074D9 8B45EC                  mov eax, dword ptr [ebp-14]
:004074DC 8B4DE4                  mov ecx, dword ptr [ebp-1C]
:004074DF 898114010000            mov dword ptr [ecx+00000114], eax
:004074E5 8B45E4                  mov eax, dword ptr [ebp-1C]
:004074E8 8B4DE4                  mov ecx, dword ptr [ebp-1C]
:004074EB 8B8914010000            mov ecx, dword ptr [ecx+00000114]
:004074F1 8B11                    mov edx, dword ptr [ecx]
:004074F3 8B8814010000            mov ecx, dword ptr [eax+00000114]
:004074F9 FF92C0000000            call dword ptr [edx+000000C0]
:004074FF 6A05                    push 00000005
:00407501 8B45E4                  mov eax, dword ptr [ebp-1C]
:00407504 8B8814010000            mov ecx, dword ptr [eax+00000114]

* Reference To: MFC42.Ordinal:1847, Ord:1847h
                                |
:0040750A E805400000              Call 0040B514
:0040750F 8B45E4                  mov eax, dword ptr [ebp-1C]
:00407512 8B8014010000            mov eax, dword ptr [eax+00000114]
:00407518 8945E8                  mov dword ptr [ebp-18], eax
:0040751B 8B45E8                  mov eax, dword ptr [ebp-18]
:0040751E FF7020                  push [eax+20]

* Reference To: USER32.UpdateWindow, Ord:0251h
                                |
:00407521 FF15F83D4900            Call dword ptr [00493DF8]  <--- Nag 화면 Update Call 루틴
:00407527 E900000000              jmp 0040752C

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00407527(U)
|
:0040752C E913000000              jmp 00407544
:00407531 FF75F0                  push [ebp-10]
:00407534 E895A1FFFF              call 004016CE
:00407539 C3                      ret

이 루틴을 불러내는 부분을 찾아가 보면 다음과 같습니다.

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00406E79(U)
|
:00406E7E 8B8504F7FFFF            mov eax, dword ptr [ebp+FFFFF704]
:00406E84 F6801C01000004          test byte ptr [eax+0000011C], 04
:00406E8B 0F851E000000            jne 00406EAF
:00406E91 8B8D04F7FFFF            mov ecx, dword ptr [ebp+FFFFF704]
:00406E97 E848050000              call 004073E4
:00406E9C 85C0                    test eax, eax
:00406E9E 0F840B000000            je 00406EAF
:00406EA4 8B8D04F7FFFF            mov ecx, dword ptr [ebp+FFFFF704]
:00406EAA E8D6050000              call 00407485  <--- Nag 화면을 그리는 Call

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00406E8B(C), :00406E9E(C)
|
:00406EAF C7852CF7FFFF00000000    mov dword ptr [ebp+FFFFF72C], 00000000
:00406EB9 E900000000              jmp 00406EBE

Nag 화면을 그리는 Call 루틴을 넘어가는 점프가 바로 앞에 있습니다.
주소:00406E9E의 je 00406EAF 명령어입니다.
이 부분을 이렇게 바꿉니다.

:00406E9E 0F840B000000            je 00406EAF를

:00406E9E EB0F                  jmp 00406EAF
:00406EA0 F7D8                    neg eax
:00406EA2 F7D8                    neg eax 로 바꿉니다. [ Offset은 629Eh ]

댓글목록

등록된 댓글이 없습니다.

45 (1/1P)

Search

Copyright © Cmd 명령어 52.14.80.49