好友
阅读权限25
听众
最后登录1970-1-1
|
飞叶
发表于 2012-9-9 15:15
本帖最后由 飞叶 于 2012-9-9 21:30 编辑
咪兔QQ找茬助手脱壳去校验破解教程,咪兔系列软件都可以用此方法通用破解,在第一期教程中因为没有找到校验位,所以只好教大家用内存补丁做破解,第一期教程出了之后也没有人指导我,大多都是顶啊,学习啊,什么的,有意义的回复基本没有,只好自己再花点时间研究,现在研究出来了,也写出来给大家分享,如有不当之处,还请指出,我希望能在这里多跟大家交流,2008年就进这个坛了,由于工作原因,近三年都少有出作品,主要是工作原因,最近有空,又开始玩了!下面入正题。
这期教程做为上期的补充,也是另一种方式方法,如果有空下期将教大家做去广告的教程。
上期请查看这里:http://www.52pojie.cn/thread-165217-1-1.html
用PE查壳为:UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo这个壳,我们可以用ESP定律脱壳,OD载入后停在这里:
0045AF70 > 60 PUSHAD
0045AF71 BE 00E04300 MOV ESI,Me2QQZha.0043E000 //F8到这里看寄存器ESP
0045AF76 8DBE 0030FCFF LEA EDI,DWORD PTR DS:[ESI+FFFC3000]
0045AF7C 57 PUSH EDI
0045AF7D EB 0B JMP SHORT Me2QQZha.0045AF8A
0045AF7F 90 NOP
0045AF80 8A06 MOV AL,BYTE PTR DS:[ESI]
载入后我们F8到0045AF71地址,在寄存器的ESP中选在ESP的值0012FFC4右键选择跟随到数据窗口,然后在右下角首行,点选“0012FFA4 7C930228 ntdll.7C930228”右键选择“断点”-“硬件访问”-“Dword”,然后F9运行后在如下地方断下:0045B10F 8D4424 80 LEA EAX,DWORD PTR SS:[ESP-80]
0045B113 6A 00 PUSH 0
0045B115 39C4 CMP ESP,EAX
0045B117 ^ 75 FA JNZ SHORT Me2QQZha.0045B113
0045B119 83EC 80 SUB ESP,-80
0045B11C - E9 135DFBFF JMP Me2QQZha.00410E34 //选中这里按F4跳了一下,再选中按一下F4,然后按一下F8飞向光明之顶
0045B121 0000 ADD BYTE PTR DS:[EAX],AL
0045B123 0000 ADD BYTE PTR DS:[EAX],AL
然后选中“0045B11C - E9 135DFBFF JMP Me2QQZha.00410E34”按F4跳了一下,再选中这个地方,再按一下F4,然后按一下F8,飞向光明之顶,程序的OEP:00410E34 55 PUSH EBP //光明之顶,程序的OEP
00410E35 8BEC MOV EBP,ESP
00410E37 6A FF PUSH -1
00410E39 68 F82A4100 PUSH Me2QQZha.00412AF8
00410E3E 68 980F4100 PUSH Me2QQZha.00410F98 ; JMP 到 msvcrt._except_handler3
00410E43 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
00410E49 50 PUSH EAX
现在我们可以在代码中右键选“用OllyDump脱壳调试进程”在跳出的窗口中选择“脱壳”,输入脱壳程序存放的位置及文件名保存存,至此脱壳成功。
下在我们来说破解。
OD载入刚刚脱好壳的文件,在OD中右键“搜索ASCII”进行文本字符串查找,找到字符串后,在底部有文本字符串“登录失败.账号或密码错误!”双击后来到这里: 004108C5 F2:AE REPNE SCAS BYTE PTR ES:[EDI]
004108C7 F7D1 NOT ECX
004108C9 49 DEC ECX
004108CA 75 0D JNZ SHORT 脱壳.004108D9
004108CC C786 30040000 3>MOV DWORD PTR DS:[ESI+430],脱壳.00415A34 ; 登录失败.账号或密码错误!
004108D6 5F POP EDI
004108D7 5E POP ESI
004108D8 C3 RETN
我们往上走,找关键跳,找到如下跳转:00410813 57 PUSH EDI
00410814 8B86 1C040000 MOV EAX,DWORD PTR DS:[ESI+41C]
0041081A 85C0 TEST EAX,EAX
0041081C 0F84 98000000 JE 脱壳.004108BA //关键跳,右键选择汇编,把“JE 004108BA”修改为“jmp 00410894”
00410822 8B8E 20040000 MOV ECX,DWORD PTR DS:[ESI+420]
00410828 2BC8 SUB ECX,EAX
0041082A 83E1 F0 AND ECX,FFFFFFF0
0041082D 83F9 30 CMP ECX,30
00410830 0F85 84000000 JNZ 脱壳.004108BA
我们在地址0041081C中看到关键跳,右键选择汇编,把“JE 004108BA”修改为“jmp 00410894”就是把这里直接跳转到“00410894”因为这里是第一个返回,我们就让它直接返回。
上面的修改是我们输入任意用户名密码,不管服务器返回信息正确与否,我们都能进行登录,但是因为用户名密码有到服务器验证,如果断网或者服务器关闭,服务器没有返回信息,那我们就还是无法登录,所以我们还要改两个地方,让我们输入的用户名密码不进行验证。
继续在OD中右键“搜索ASCII”进行文本字符串查找,找到字符串后,在底部有文本字符串“服务器忙,请稍候再试”双击后来到这里: 00410746 C786 30040000 085A4100 MOV DWORD PTR DS:[ESI+430],脱壳.00415A08 ; 服务器忙,请稍候再试.
00410750 5F POP EDI
00410751 5E POP ESI
00410752 33C0 XOR EAX,EAX
00410754 5B POP EBX
00410755 81C4 1C020000 ADD ESP,21C
0041075B C3 RETN
我们还是往上找关键跳,找到地址“0041067D”这个跳转:00410673 E8 68FDFFFF CALL 脱壳.004103E0 //这个CALL一会儿进去看看
00410678 83C4 0C ADD ESP,0C
0041067B 85C0 TEST EAX,EAX
0041067D 0F84 C3000000 JE 脱壳.00410746 //这个跳我们直接把它NOP掉
00410683 C786 38040000 01000000 MOV DWORD PTR DS:[ESI+438],1
我们把地址“0041067D”这个跳我们直接把它NOP掉,在地址“0041067D”处右键选择“二进制”-“使用NOP填充”。
我们还看到在刚刚修改的那个跳转上面还有一个CALL,我们选中这个CALL回车进去看看, 00410673 E8 68FDFFFF CALL 脱壳.004103E0 选中上面地址的CALL按回车键进入后到如下代码: 004103E0 51 PUSH ECX
004103E1 53 PUSH EBX
004103E2 8B5C24 14 MOV EBX,DWORD PTR SS:[ESP+14]
004103E6 55 PUSH EBP
004103E7 56 PUSH ESI
004103E8 8B7424 18 MOV ESI,DWORD PTR SS:[ESP+18]
004103EC 57 PUSH EDI
004103ED 33ED XOR EBP,EBP
004103EF C74424 10 02000000 MOV DWORD PTR SS:[ESP+10],2
004103F7 6A 00 PUSH 0
004103F9 6A 00 PUSH 0
004103FB 6A 00 PUSH 0
004103FD 6A 00 PUSH 0
004103FF 68 A8594100 PUSH 脱壳.004159A8 ; IE6.0
00410404 FF15 9C234100 CALL DWORD PTR DS:[<&WININET.InternetOpe>; WININET.InternetOpenA
0041040A 8BF8 MOV EDI,EAX
0041040C 85FF TEST EDI,EDI
0041040E 74 41 JE SHORT 脱壳.00410451 //这里右键选择汇编,把“JE SHORT 00410451”修改为“jmp 00410481”
00410410 8B4424 18 MOV EAX,DWORD PTR SS:[ESP+18]
00410414 6A 00 PUSH 0
看到第一个Call下面地址“0041040E”有个跳转,我们就修改这个跳转,在地址“0041040E”处右键选择汇编,把“JE SHORT 00410451”修改为“jmp 00410481”。
到这里,我们的修改就大功告成了,然后OD中点右键选“复制到可执行文件”-“所有修改”,选择“全部复制”,在跳出的新窗口中还是点右键,选“保存到文件”即可!
好了,到此,我们打开刚刚保存好的已破解外挂程序,输入任意用户名密码点选“登录”,便可使用了。但是用一段时间后你会发现,软件就不起作用了,我再试试没有破解的脱壳软件,还是一样的问题,由此分析,这个软件有自校验,下面我们来讲如何去自校验。
重新OD载入刚刚破解好的软件,在OD底部的命令框里输入“bp CreateFileA”按F9运行软件。程充断下来后,我们注意看OD里右下框的“注释”,我总共按了138下F9才出现如下信息: 0012C8F8 736DB6EA /CALL 到 CreateFileA 来自 DDRAW.736DB6E4 //注意看这里
0012C8FC 0012CA80 |FileName = "D:\咪兔QQ游戏外挂\Me2QQZhaoChaV20\脱壳.exe" //还有注意看这里
0012C900 80000000 |Access = GENERIC_READ
0012C904 00000001 |ShareMode = FILE_SHARE_READ
0012C908 00000000 |pSecurity = NULL
0012C90C 00000003 |Mode = OPEN_EXISTING
0012C910 00000080 |Attributes = NORMAL
0012C914 00000000 \hTemplateFile = NULL
根据每个人的电脑不同,按F9的次数可能会有所不同,但是出现上面信息时就要注意了,主要是看第一行“来自”后面的内容以及第二行“FileName =”后面的内容。记住这里一定要看到CALL 到 CreateFileA 来自0040FA45时停下来,重点是看0040出现在这里时,我们才停下来看到如下信息。03CEF880 0040FA4B /CALL 到 CreateFileA 来自 脱壳.0040FA45 //这里只要是0040开头就对了
03CEF884 03CEF8BC |FileName = "D:\咪兔QQ游戏外挂\Me2QQZhaoChaV20\脱壳.exe"
03CEF888 80000000 |Access = GENERIC_READ
03CEF88C 00000000 |ShareMode = 0
03CEF890 00000000 |pSecurity = NULL
03CEF894 00000004 |Mode = OPEN_ALWAYS
03CEF898 00000000 |Attributes = 0
03CEF89C 00000000 \hTemplateFile = NULL
这时我们按Ctrl+F9执行到返回,再按一下F8返回到这里:0040FA4B 8BF0 mov esi,eax
0040FA4D 83FE FF cmp esi,-0x1
0040FA50 75 04 jnz X脱壳.0040FA56
0040FA52 33C0 xor eax,eax
0040FA54 5E pop esi
0040FA55 C3 retn
我们再按Ctrl+F9执行到返回,再按一下F8返回到这里:00404E5A 8BF0 mov esi,eax
00404E5C 83C4 04 add esp,0x4
00404E5F 85F6 test esi,esi
00404E61 75 23 jnz X脱壳.00404E86
这时我们往下看,看到如下信息:00404EA8 8B57 1C mov edx,dword ptr ds:[edi+0x1C]
00404EAB 83C4 08 add esp,0x8
00404EAE 33C9 xor ecx,ecx
00404EB0 3BC2 cmp eax,edx
00404EB2 0F95C1 setne cl //注意这里比较相等就为假,不相等就为真
在这里setne cl就是关键验证比较相等就为假,不相等就为真,我们把它修改成sete cl后比较相等就为真,不相等就为假。
|
-
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|