2011. 4. 4. 01:20

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

Reverse Engineering/TooL2011. 3. 7. 19:09
odbg110_UST_2bg


Posted by Brawler™
크랙파일과 원본파일 텍스트자료
올리디버를 사용해서 텍스트로 뽑았습니다~

Crack.txt
Original.txt

UltraCompare 같은 툴로 두 파일을 비교해 수정한 곳 찾기~



'Reverse Engineering > TIP & TECH' 카테고리의 다른 글

디버거 제작조 참고자료~  (0) 2011.04.04
어셈설명~  (0) 2011.01.24
IE8에서 ActiveX 디버깅 하기  (0) 2011.01.24
Posted by Brawler™
Author Lena
Author website http://www.tuts4you.com/forum/index.php?showforum=41
Description Continued reversing techniques in VB, use of decompilers and a basic anti-anti-trick.
Image no image available
Filesize 1.96 mb
Date Saturday 02 September 2006 - 09:29:52


Posted by Brawler™
Author Lena
Author website http://www.tuts4you.com/forum/index.php?showforum=41
Description Explaining the Visual Basic concept, introduction to SmartCheck and configuration
Image no image available
Filesize 3.01 mb
Date Saturday 02 September 2006 - 09:27:40


Posted by Brawler™
Author Lena
Author website http://www.tuts4you.com/forum/index.php?showforum=41
Description Debugging with W32Dasm, RVA, VA and offset, using LordPE as a hexeditor
Image no image available
Filesize 2.57 mb
Date Saturday 02 September 2006 - 09:27:52


Posted by Brawler™
Author Lena
Author website http://www.tuts4you.com/forum/index.php?showforum=41
Description Intermediate level patching, Kanal in PEiD
Image no image available
Filesize 1.94 mb
Date Saturday 02 September 2006 - 09:25:36


Posted by Brawler™
Author Lena
Author website http://www.tuts4you.com/forum/index.php?showforum=41
Description "The plain stupid patching method", searching for textstrings
Image no image available
Filesize 3.63 mb
Date Saturday 02 September 2006 - 09:24:26


Posted by Brawler™
Author Lena
Author website http://www.tuts4you.com/forum/index.php?showforum=41
Description Comparing on changes in conditional jumps, animate over/in, breakpoints
Image no image available
Filesize 2.88 mb
Date Saturday 02 September 2006 - 09:24:00


Posted by Brawler™
Author Lena
Author website http://www.tuts4you.com/forum/index.php?showforum=41
Description Basic + aesthetic patching
Image no image available
Filesize 2.67 mb
Date Saturday 02 September 2006 - 09:21:24


Posted by Brawler™
Author Lena
Author website http://www.tuts4you.com/forum/index.php?showforum=41
Description Basic nag removal + header problems
Image no image available
Filesize 1.65 mb
Date Saturday 02 September 2006 - 09:21:25


Posted by Brawler™
Author Lena
Author website http://www.tuts4you.com/forum/index.php?showforum=41
Description Keyfiling the reverseme + assembler
Image no image available
Filesize 884.49 kb
Date Saturday 02 September 2006 - 09:19:39


Posted by Brawler™

Author Lena
Author website http://www.tuts4you.com/forum/index.php?showforum=41
Description Olly + assembler + patching a basic reverseme
Image no image available
Filesize 1.39 mb
Date Saturday 02 September 2006 - 09:09:26

Posted by Brawler™

:00440B68 E8951D0B00  Call GetDlgItem  ;핸들을 구해온다.
:00440B6D 8BC8            mov ecx, eax  ;결과를 ecx에 넣는다.
:00440B6F E8761A0B00  Call GetWindowTextA  ;텍스트를 구해온다.
:00440B74 8D4C2404     lea ecx, dword ptr [esp+04]  ;ecx의 값을 [esp+0x4]의 값으로
:00440B78                     Call TrimLeft    ;뭘까? EAX의 값이 우리가 입력한값이됨
:00440B7D                     lea  ecx, [esp+4] ;ecx의 값을 [esp+0x4]의 값으로
:00440B81                     Call TrimRight EAX와 ECX가 우리가 입력한 값이됨
:00440B8F 51                 push ecx             ;우리가 입력한값을 스택에 넣음
---------------------------------------------------------------------------------
0x440B78 ~ 0x440B8A 까지는 입력된 키를 대문자로 만듬.
---------------------------------------------------------------------------------
:00440B8F 51                push ecx  ;대문자화된 값을 스택에 넣는다.
:00440BA2 E859000000   Call 0x00440C00  ;키 체크 루틴 <======================중요
:00440BA7 85C0             test eax, eax  ;eax 를 테스트 하여 본다.
:00440BA9 6A00             push 00000000  ;스택에 0을 넣는다.
:00440BAB 68FC605300  push 005360FC  ;다이얼로그의 제목
:00440BB0 750E             jne 0x00440BC0  ;테스트 결과가..(Zero 플래그가 0이 아니면) 점프
:00440BB2 68DC605300   push 005360DC  ;스택에 "등록 번호가 올바르지 않습니다." 넣음
:00440BB9 E8561D0B00   Call MessageBoxA  ;메시지창 띄움
:00440BBE EB13             jmp 0x00440BD3  ;점프
-----------------------------------------------------------------------------------
자 우리는 윗부분에서 0x440BA2 에서 키 체크 루틴을 콜 하는것을 볼수 있습니다.
그럼 이제 키 체크 루틴인 0x440C00 부분을 분석하여 보죠
-----------------------------------------------------------------------------------
:00440C31 83F91B            cmp ecx, 0000001B  ;우리가 입력한 값이27자인가?
:00440C34 0F85E5010000  jne 00440E1F           ;아니라면 점프
:00440C3A 8A4809           mov cl, byte ptr [eax+09]  ;10번쨰 글자가 가져와서 CL에 넣는다.
:00440C3D 80F92D           cmp cl, 2D               ;10번쨰 글자가 하이푼(-) 인가?
:00440C40 0F85D9010000  jne 00440E1F           ;하이푼이 아니라면 점프
:00440C46 8078122D         cmp byte ptr [eax+12], 2D  ;19번쨰 글자가 하이푼(-) 인가?
:00440C4A 0F85CF010000  jne 00440E1F          ;아니라면 점프
-------------------------------------------------------------------------------------
:00440C67 8A10                mov dl, byte ptr [eax]  ;eax의[우리가입력한] 첫번쨰 글자를 dl에 넣는다.
:00440C69 8A1E                mov bl, byte ptr [esi]   ;esi의 첫번쨰 글자를 bl 에 넣는다.
:00440C6B 8ACA               mov cl, dl                    ;dl(첫번쨰 글자)를 cl에 복사해둔다.
:00440C6D 3AD3                cmp dl, bl                    ;dl과 bl 비교
:00440C6F 751E                 jne 00440C8F              ;같지 않다면 점프
:00440C71 84C9                 test cl, cl                    ;cl(dl을 복사해둔값)이 0인가?
:00440C73 7416                  je 00440C8B               ;그렇다면 점프
------------------------------------------------------------------------------------
:00440C75 8A5001              mov dl, byte ptr [eax+01]  ;eax의[우리가입력한] 두번쨰 글자를 dl에 넣는다.
:00440C78 8A5E01              mov bl, byte ptr [esi+01]  ;esi의 두번쨰 글자를 bl 에 넣는다.
:00440C7B 8ACA                mov cl, dl                        ;dl(두번쨰 글자)를 cl에 복사해둔다.
:00440C7D 3AD3                 cmp dl, bl                        ;dl과 bl 비교
:00440C7F 750E                  jne 00440C8F                  ;같지 않다면 점프
:00440C81 83C002               add eax, 00000002           ;eax의 앞에 2글자를 지움[바꿈]
:00440C84 83C602               add esi, 00000002            ;esi의 앞에 2글자를 지움[바꿈]
:00440C87 84C9                  test cl, cl                        ;cl(dl을 복사해둔값)이 0 인가?
:00440C89 75DC                  jne 00440C67                  ;아니라면 0x440C67로 다시 돌아감
------------------------------------------------------------------------------------
:00440C8B 33C0                  xor eax, eax                   ;eax를 0으로 초기화
:00440C8D EB05                  jmp 00440C94                 ;0x440C94로 점프
------------------------------------------------------------------------------------
:00440C94 3BC7                  cmp eax, edi                  ;eax와 edi를 비교한다. [둘다 0 이다.]
------------------------------------------------------------------------------------
:00440CA2 84DB                  test bl, bl                       ;bl을 테스트 한다.
:00440CA4 0F8575010000      jnz 00440E1F                 ;0이 아니면 점프
------------------------------------------------------------------------------------
:00440D68 8A5C3410            mov bl, byte ptr [esp+esi+10]  ;bl에 esp+esi+10의 값을 가져온다.
:00440D6C 8D4C2414           lea ecx, dword ptr [esp+14]    ;ecx에 값을 esp+14으로 만든다.
:00440D70 8AC3                   mov al, bl                              ;bl의 값을 al에 복사해둔다.
:00440D72 C0E804                shr al, 04                              ;al을 4로 나눈다.
:00440D75 0444                    add al, 44                             ;al에 44를 더한다.
:00440D77 50                        push eax                              ;eax의 값을 스택에 집어넣는다.
:00440D78 E8C5170B00          Call YCString                         ;아이돈노
:00440D7D 81E3FF000000       and ebx, 000000FF                 ;ebx를 FF와 and 연산
:00440D83 81E30F000080        and ebx, 8000000F                 ;ebx를 8000000F와 and 연산
:00440D89 7905                     jns 00440D90                         ;싸인 플레그가 셋되지 않았으면 점프
:00440D8B 4B                      dec ebx                                 ;ebx값 1 감소
:00440D8C 83CBF0               or ebx, FFFFFFF0                   ;ebx를 FFFFFFF0와 or 연산
:00440D8F 43                       inc ebx                                  ;ebx를 1 증가 시킴
:00440D90 80C344                add bl, 44                              ;bl의 값을 44증가 시킴
:00440D93 8D4C2414            lea ecx, dword ptr [esp+14]    ;ecx에 값을 esp+14으로 만든다.
:00440D97 53                      push ebx                                ;ebx의 값을 스택에 집어넣는다.
:00440D98 E8A5170B00        Call YCString                           ;아이돈노
:00440D9D 46                      inc esi                                    ;esi의 값을 1 증가 시킴
:00440D9E 83FE04               cmp esi, 00000004                   ;esi를 4와 비교한다.
:00440DA1 7CC5                  jl 00440D68                             ;작다면 0x440D68로 다시 돌아감
------------------------------------------------------------------------------------
:00440DAA 8A10                   mov dl, byte ptr [eax]  ;dl에 eax[우리가입력한키]의 첫번쨰 글자를 넣는다.
:00440DAC 8A1E                   mov bl, byte ptr [esi]  ;bl에 esi의 첫번쨰 글자를 넣는다.
:00440DAE 8ACA                   mov cl, dl                   ;dl(첫번째 글자)를 cl에 복사해둔다.
:00440DB0 3AD3                    cmp dl, bl                   ;dl 과 bl 비교
:00440DB2 751E                    jne 00440DD2              ;같지 않으면 점프
:00440DB4 84C9                    test cl, cl                   ;cl(dl을 복사해둔값)이 0 인가?
:00440DB6 7416                    je 00440DCE               ;0 이면 점프???
------------------------------------------------------------------------------------
:00440DB8 8A5001                 mov dl, byte ptr [eax+01]  ;dl에 eax의 두번쨰 글자를 넣는다.
:00440DBB 8A5E01                mov bl, byte ptr [esi+01]   ;bl에 esi의 두번쨰 글자를 넣는다.
:00440DBE 8ACA                   mov cl, dl                        ;dl(첫번째 글자)를 cl에 복사해둔다.
:00440DC0 3AD3                    cmp dl, bl                        ;dl 과 bl 비교
:00440DC2 750E                    jne 00440DD2                   ;같지 않으면 점프
:00440DC4 83C002                 add eax, 00000002           ;eax의 앞에 2글자를 지움[바꿈]
:00440DC7 83C602                 add esi, 00000002            ;esi의 앞에 2글자를 지움[바꿈]
:00440DCA 84C9                    test cl, cl                        ;cl(dl을 복사해둔값)이 0 인가?
:00440DCC 75DC                    jne 00440DAA                 ;아니라면 0x440DAA로 다시 돌아감
------------------------------------------------------------------------------------
우리는 키체크루틴의 분석을 완료 했으니 우리는
우리의 등록번호를 뽑아낼수 있습니다.
음 과연 어디서 등록번호를 얻을수 있을까요?
위의 코드 분석을 잘 보시면 알수 있습니다.
저는 밑의 코드들이 실질적인 등록번호 체크 루틴
일껏이라고 짐작(?) 하여 봅니다.
---------------------------------------------------------------------------------
:00440C31 83F91B cmp ecx, 0000001B ;우리가 입력한 값이27자인가?
:00440C34 0F85E5010000 jne 00440E1F ;아니라면 점프
:00440C3A 8A4809 mov cl, byte ptr [eax+09] ;10번쨰 글자가 가져와서 CL에 넣는다.
:00440C3D 80F92D cmp cl, 2D ;10번쨰 글자가 하이푼(-) 인가?
:00440C40 0F85D9010000 jne 00440E1F ;하이푼이 아니라면 점프
:00440C46 8078122D cmp byte ptr [eax+12], 2D ;19번쨰 글자가 하이푼(-) 인가?
:00440C4A 0F85CF010000 jne 00440E1F ;아니라면 점프
-------------------------------------------------------------------------------------
:00440C67 8A10 mov dl, byte ptr [eax] ;eax의[우리가입력한] 첫번쨰 글자를 dl에 넣는다.
:00440C69 8A1E mov bl, byte ptr [esi] ;esi의 첫번쨰 글자를 bl 에 넣는다.
:00440C6B 8ACA mov cl, dl ;dl(첫번쨰 글자)를 cl에 복사해둔다.
:00440C6D 3AD3 cmp dl, bl ;dl과 bl 비교
:00440C6F 751E jne 00440C8F ;같지 않다면 점프
:00440C71 84C9 test cl, cl ;cl(dl을 복사해둔값)이 0인가?
:00440C73 7416 je 00440C8B ;그렇다면 점프
------------------------------------------------------------------------------------
:00440C75 8A5001 mov dl, byte ptr [eax+01] ;eax의[우리가입력한] 두번쨰 글자를 dl에 넣는다.
:00440C78 8A5E01 mov bl, byte ptr [esi+01] ;esi의 두번쨰 글자를 bl 에 넣는다.
:00440C7B 8ACA mov cl, dl ;dl(두번쨰 글자)를 cl에 복사해둔다.
:00440C7D 3AD3 cmp dl, bl ;dl과 bl 비교
:00440C7F 750E jne 00440C8F ;같지 않다면 점프
:00440C81 83C002 add eax, 00000002 ;eax의 앞에 2글자를 지움[바꿈]
:00440C84 83C602 add esi, 00000002 ;esi의 앞에 2글자를 지움[바꿈]
:00440C87 84C9 test cl, cl ;cl(dl을 복사해둔값)이 0 인가?
:00440C89 75DC jne 00440C67 ;아니라면 0x440C67로 다시 돌아감
-----------------------------------------------------------------------------------
:00440DAA 8A10 mov dl, byte ptr [eax] ;dl에 eax[우리가입력한키]의 첫번쨰 글자를 넣는다.
:00440DAC 8A1E mov bl, byte ptr [esi] ;bl에 esi의 첫번쨰 글자를 넣는다.
:00440DAE 8ACA mov cl, dl ;dl(첫번째 글자)를 cl에 복사해둔다.
:00440DB0 3AD3 cmp dl, bl ;dl 과 bl 비교
:00440DB2 751E jne 00440DD2 ;같지 않으면 점프
:00440DB4 84C9 test cl, cl ;cl(dl을 복사해둔값)이 0 인가?
:00440DB6 7416 je 00440DCE ;0 이면 점프???
------------------------------------------------------------------------------------
:00440DB8 8A5001 mov dl, byte ptr [eax+01] ;dl에 eax의 두번쨰 글자를 넣는다.
:00440DBB 8A5E01 mov bl, byte ptr [esi+01] ;bl에 esi의 두번쨰 글자를 넣는다.
:00440DBE 8ACA mov cl, dl ;dl(첫번째 글자)를 cl에 복사해둔다.
:00440DC0 3AD3 cmp dl, bl ;dl 과 bl 비교
:00440DC2 750E jne 00440DD2 ;같지 않으면 점프
:00440DC4 83C002 add eax, 00000002 ;eax의 앞에 2글자를 지움[바꿈]
:00440DC7 83C602 add esi, 00000002 ;esi의 앞에 2글자를 지움[바꿈]
:00440DCA 84C9 test cl, cl ;cl(dl을 복사해둔값)이 0 인가?
:00440DCC 75DC jne 00440DAA ;아니라면 0x440DAA로 다시 돌아감


 

'Reverse Engineering > TIP & TECH' 카테고리의 다른 글

디버거 제작조 참고자료~  (0) 2011.04.04
WM Recorder 14.8  (0) 2011.02.04
IE8에서 ActiveX 디버깅 하기  (0) 2011.01.24
Posted by Brawler™


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\ 이곳에
TabProcGrowth값을 DWORD값으로 생성하고 값은 0으로 해주면 됨


'Reverse Engineering > TIP & TECH' 카테고리의 다른 글

디버거 제작조 참고자료~  (0) 2011.04.04
WM Recorder 14.8  (0) 2011.02.04
어셈설명~  (0) 2011.01.24
Posted by Brawler™