|
步骤: 1.首先应该看看这个外挂,安装好后打开外挂,需要注册,怎么办呢???随便输入几个数字吧!!!就来输入777777777777777777(个人习惯),点注册后说无效的注册码,早在预料之内,无所谓啊.就是要看他出现什么提示. 2.抓住他的提示哦,我们现在用W32Dams来把外挂进行反汇编,然后点参考,然后点串式数据参考,在里面找到刚才的提示.双击然后点取消对话匡.好了!就到了这里: 00407125 . 52 PUSH EDX ********再此处下断点******* 00407126 . FF15 406C4100 CALL DWORD PTR DS:[416C40]*******关键的比较语句****** 0040712C . 85C0 TEST EAX,EAX 0040712E . 75 5C JNZ SHORT CRONOUS_.0040718C 00407130 . 6A 10 PUSH 10 MB_OK|MB_ICONHAND|MB_APPLMODAL 00407132 . 68 EC614100 PUSH CRONOUS_.004161EC 00407137 . 68 DC614100 PUSH CRONOUS_.004161DC ******我们来到这里******* 0040713C . 50 PUSH EAX
我们来到这里,现在我往上看,看看上面有没有关键的语句 :p 上面00407126的call就是,这个就是关键call.通过这个call执行下面的比较和0040712e 处的跳转,而0040712e jne SHORT CRONOUS_.0040718C 就是跳转到失败的地方,所以我们要进到00407126的call里面看看,看他个究竟. 3.运行TRW后Ctrl+N,让它最小话,再打开外挂,再里面输入777777777777777777,注意!不要按注册啊!~~~~这个时候再按Crtl+N呼出TRW2000,下命令 bpx hmemcpy 回车,再下命令 g 回车! 好了!现在可以按确定了! 这时候TRW2000拦截住了外挂程序,当然,现在不是在外挂的领空,我们要到外挂的领空.连续按F12 60次(郁闷吧) !!!!就来到它的领空了!不要按多了啊!按多一次就要出现注册失败了! 4.现在我们要分析程序了!准备好啊!眼睛不要花了啊!看着点!不要分心啊(是不是觉的我很废话…………) 还记得刚才的哪个call附近的地址吗?什么!!!!??没有记下!我晕!那就重来1--3步吧!记下哪些地址啊!记下的同志们可以继续了!我们用命令 g 00407125 回车,来到刚才哪个call的上面一行了吧!!好了!注意!我们现在要按一次F10, 一次啊!一次哦!就一次哦~~~~~~哈哈!是不是到了哪个call那行了啊???到了就好!我们再按一次F8进入到这个call中间!!!!
我们来到这里: 10001F10 > 81EC 88080000 SUB ESP,888 ********我们停留在这里****** 10001F16 8D8424 88000000 LEA EAX,DWORD PTR SS:[ESP+88] 10001F1D 53 PUSH EBX 10001F1E 55 PUSH EBP 10001F1F 56 PUSH ESI 10001F20 57 PUSH EDI 10001F21 50 PUSH EAX 10001F22 E8 09F9FFFF CALL YLINFOSN.10001830 10001F27 8DBC24 9C000000 LEA EDI,DWORD PTR SS:[ESP+9C] 10001F2E 83C9 FF OR ECX,FFFFFFFF 10001F31 33C0 XOR EAX,EAX 10001F33 83C4 04 ADD ESP,4 10001F36 F2:AE REPNE SCAS BYTE PTR ES:[EDI] 10001F38 F7D1 NOT ECX 10001F3A 49 DEC ECX 10001F3B 74 0B JE SHORT YLINFOSN.10001F48 10001F3D 8A8424 98000000 MOV AL,BYTE PTR SS:[ESP+98] 10001F44 84C0 TEST AL,AL 10001F46 75 29 JNZ SHORT YLINFOSN.10001F71 10001F48 BF E8900010 MOV EDI,YLINFOSN.100090E8 10001F4D 83C9 FF OR ECX,FFFFFFFF 10001F50 33C0 XOR EAX,EAX 10001F52 8D9424 98000000 LEA EDX,DWORD PTR SS:[ESP+98] 10001F59 F2:AE REPNE SCAS BYTE PTR ES:[EDI] 10001F5B F7D1 NOT ECX 10001F5D 2BF9 SUB EDI,ECX 10001F5F 8BC1 MOV EAX,ECX 10001F61 8BF7 MOV ESI,EDI 10001F63 8BFA MOV EDI,EDX 10001F65 C1E9 02 SHR ECX,2 10001F68 F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS> 10001F6A 8BC8 MOV ECX,EAX 10001F6C 83E1 03 AND ECX,3 10001F6F F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[> 10001F71 8DBC24 98000000 LEA EDI,DWORD PTR SS:[ESP+98] 10001F78 83C9 FF OR ECX,FFFFFFFF 10001F7B 33C0 XOR EAX,EAX 10001F7D BD 38900010 MOV EBP,YLINFOSN.10009038 10001F82 F2:AE REPNE SCAS BYTE PTR ES:[EDI] 10001F84 F7D1 NOT ECX 10001F86 49 DEC ECX 10001F87 33FF XOR EDI,EDI 10001F89 8BD9 MOV EBX,ECX ……………………省略………………………………
现在我们注意打起百分之二百的精神注意啊!尤其要注意关键的比较语句附近,我们用F10单步往下走,一直走到10001fac jl 10001f8d这个地址,这个地址又把我们送回到 10001f8d ,我们继续用f10,这时候你会发现就在这个地方做循环,当每次走到10001fa9的时候,用d ecx 看下,是不是每次都加一啊!哈哈!这也许是他内部的运算,不管,当它为循环到第6次的时候就不再执行10001fac 的跳转,而继续走,到了10001fb7的时候又返回到1000018b ,这个循环好象做5次,记不太清楚了!^0^ 不管,让他做完后继续走就好了,还是用f10走啊!不要错了!
10001F8B 33C9 XOR ECX,ECX ***0001fb7送我们来这里******* 10001F8D 8BC7 MOV EAX,EDI ******把我们送到这里了**** 10001F8F 99 CDQ 10001F90 F7FB IDIV EBX 10001F92 8A8414 98000000 MOV AL,BYTE PTR SS:[ESP+EDX+98] 10001F99 8DB414 98000000 LEA ESI,DWORD PTR SS:[ESP+EDX+98] 10001FA0 8A1429 MOV DL,BYTE PTR DS:[ECX+EBP] 10001FA3 32C2 XOR AL,DL 10001FA5 47 INC EDI 10001FA6 41 INC ECX 10001FA7 8806 MOV BYTE PTR DS:[ESI],AL 10001FA9 83F9 06 CMP ECX,6 *******用d ecx 看看********* 10001FAC ^ 7C DF JL SHORT YLINFOSN.10001F8D *******到这个地方送我们上去****** 10001FAE 83C5 06 ADD EBP,6 10001FB1 81FD 5C900010 CMP EBP,YLINFOSN.1000905C 10001FB7 ^ 7C D2 JL SHORT YLINFOSN.10001F8B ******又送我们到1000018b***** 10001FB9 8D049D 00000000 LEA EAX,DWORD PTR DS:[EBX*4]
后面还有跳转和循环的,都可以不用管,我们只要注意到一个地址,那就是10002090,
10001FC0 50 PUSH EAX 10001FC1 E8 D9050000 CALL YLINFOSN.1000259F 10001FC6 83C4 04 ADD ESP,4 10001FC9 33F6 XOR ESI,ESI 10001FCB 85DB TEST EBX,EBX 10001FCD 8BE8 MOV EBP,EAX 10001FCF 7E 3E JLE SHORT YLINFOSN.1000200F 10001FD1 8BFB MOV EDI,EBX 10001FD3 81E7 01000080 AND EDI,80000001 10001FD9 79 05 JNS SHORT YLINFOSN.10001FE0 10001FDB 4F DEC EDI 10001FDC 83CF FE OR EDI,FFFFFFFE 10001FDF 47 INC EDI 10001FE0 33C9 XOR ECX,ECX 10001FE2 8BC1 MOV EAX,ECX 10001FE4 99 CDQ 10001FE5 F7FB IDIV EBX 10001FE7 33C0 XOR EAX,EAX 10001FE9 8D1452 LEA EDX,DWORD PTR DS:[EDX+EDX*2] 10001FEC 8A8457 38900010 MOV AL,BYTE PTR DS:[EDI+EDX*2+10009038] 10001FF3 33D2 XOR EDX,EDX 10001FF5 8A940C 98000000 MOV DL,BYTE PTR SS:[ESP+ECX+98] 10001FFC 03C2 ADD EAX,EDX 10001FFE 46 INC ESI 10001FFF 89448D 00 MOV DWORD PTR SS:[EBP+ECX*4],EAX 10002003 8BCE MOV ECX,ESI 10002005 81E1 FFFF0000 AND ECX,0FFFF 1000200B 3BCB CMP ECX,EBX 1000200D ^ 7C D3 JL SHORT YLINFOSN.10001FE2 1000200F 33C0 XOR EAX,EAX 10002011 B9 00010000 MOV ECX,100 10002016 8DBC24 98040000 LEA EDI,DWORD PTR SS:[ESP+498] 1000201D 3BD8 CMP EBX,EAX 1000201F F3:AB REP STOS DWORD PTR ES:[EDI] 10002021 894424 14 MOV DWORD PTR SS:[ESP+14],EAX 10002025 7E 59 JLE SHORT YLINFOSN.10002080 10002027 8B4485 00 MOV EAX,DWORD PTR SS:[EBP+EAX*4] 1000202B 8D4C24 18 LEA ECX,DWORD PTR SS:[ESP+18] 1000202F 50 PUSH EAX 10002030 68 A8900010 PUSH YLINFOSN.100090A8 10002035 51 PUSH ECX 10002036 E8 95020000 CALL YLINFOSN.100022D0 1000203B 8D7C24 24 LEA EDI,DWORD PTR SS:[ESP+24] 1000203F 83C9 FF OR ECX,FFFFFFFF 10002042 33C0 XOR EAX,EAX 10002044 83C4 0C ADD ESP,0C 10002047 F2:AE REPNE SCAS BYTE PTR ES:[EDI] 10002049 F7D1 NOT ECX 1000204B 2BF9 SUB EDI,ECX 1000204D 8D9424 98040000 LEA EDX,DWORD PTR SS:[ESP+498] 10002054 8BF7 MOV ESI,EDI 10002056 8BFA MOV EDI,EDX 10002058 8BD1 MOV EDX,ECX 1000205A 83C9 FF OR ECX,FFFFFFFF 1000205D F2:AE REPNE SCAS BYTE PTR ES:[EDI] 1000205F 8BCA MOV ECX,EDX 10002061 4F DEC EDI 10002062 C1E9 02 SHR ECX,2 10002065 8B4424 14 MOV EAX,DWORD PTR SS:[ESP+14] 10002069 F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS> 1000206B 8BCA MOV ECX,EDX 1000206D 83E1 03 AND ECX,3 10002070 40 INC EAX 10002071 894424 14 MOV DWORD PTR SS:[ESP+14],EAX 10002075 25 FFFF0000 AND EAX,0FFFF 1000207A 3BC3 CMP EAX,EBX 1000207C F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[> 1000207E ^ 7C A7 JL SHORT YLINFOSN.10002027 10002080 55 PUSH EBP 10002081 E8 0E050000 CALL YLINFOSN.10002594 10002086 8BBC24 A0080000 MOV EDI,DWORD PTR SS:[ESP+8A0] 1000208D 83C4 04 ADD ESP,4 10002090 8BF7 MOV ESI,EDI ****这里的是你输入的注册号**** 10002092 8D8424 98040000 LEA EAX,DWORD PTR SS:[ESP+498] 10002099 8A10 MOV DL,BYTE PTR DS:[EAX] 1000209B 8A1E MOV BL,BYTE PTR DS:[ESI] 1000209D 8ACA MOV CL,DL 1000209F 3AD3 CMP DL,BL 100020A1 75 1E JNZ SHORT YLINFOSN.100020C1 100020A3 84C9 TEST CL,CL 100020A5 74 16 JE SHORT YLINFOSN.100020BD 100020A7 8A50 01 MOV DL,BYTE PTR DS:[EAX+1] 100020AA 8A5E 01 MOV BL,BYTE PTR DS:[ESI+1] 100020AD 8ACA MOV CL,DL 100020AF 3AD3 CMP DL,BL 100020B1 75 0E JNZ SHORT YLINFOSN.100020C1 100020B3 83C0 02 ADD EAX,2 100020B6 83C6 02 ADD ESI,2 100020B9 84C9 TEST CL,CL 100020BB ^ 75 DC JNZ SHORT YLINFOSN.10002099 100020BD 33C0 XOR EAX,EAX 100020BF EB 05 JMP SHORT YLINFOSN.100020C6 100020C1 1BC0 SBB EAX,EAX *****这里注册号码出现***** 100020C3 83D8 FF SBB EAX,-1 100020C6 85C0 TEST EAX,EAX 100020C8 74 0F JE SHORT YLINFOSN.100020D9 100020CA 5F POP EDI 100020CB 5E POP ESI 100020CC 5D POP EBP 100020CD 33C0 XOR EAX,EAX 100020CF 5B POP EBX 100020D0 81C4 88080000 ADD ESP,888 100020D6 C2 0400 RETN 4 在10002090处 用 d 命令看看, 是不是发现你输入的注册码,注意,可能真的注册码就在附近.f10到了100020c1下面行下命令 d eax 是不是看见了一串数字啊??我的是:6112812514210115187219,你们的可要你们自己看了啊! |