第二课学习完的心得
本帖最后由 玛朵布莎辞 于 2016-8-16 21:34 编辑一.首先谈谈脱壳,脱壳还是老方法我比较喜欢ESP定律因为通用度高嘛,然后吗特定的壳大家学习过XIMO视频之后应该有特定的对策,比如UPX的CTRL+B "00"法,还有北斗壳的POPAD一步直达法
二.脱完壳之后就来到程序OEP,然后智能搜索,http或者52pojie双击返回反汇编窗口,然后找到地址,一开始我遇到了这样的情况,什么都没有,没有视频里的那种explorer.exehttp://xx这类
后来想起来应该是类型错了,上次为了使用硬件断点脱壳改成了地址,为了一起学习的同学们不至于懵,(也可能我多虑了)。
这样改成文本ASCII32或者64之后,就能显示出来了。
这样就可以用OO填充或者FF填充了。
三.接下来就是作业中的改注册表遇到的问题了
教程里面介绍了神奇的retn大法,但是无奈我才疏学浅,在作业中retn大法并没有用,还导致了程序的崩溃,于是乎,我推荐大家将这一整段代码全部NOP掉(方法一)
004026B0 55 push ebp
004026B1 8BEC mov ebp,esp
004026B3 83EC 38 sub esp,0x38
004026B6 A1 F41C5700 mov eax,dword ptr ds:
004026BB 33C5 xor eax,ebp
004026BD 8945 F8 mov dword ptr ss:,eax
004026C0 56 push esi
004026C1 57 push edi
004026C2 C745 C8 7019550>mov dword ptr ss:,33.00551970; SOFTWARE\microsoft\Internet Explorer\Main
004026C9 B9 0B000000 mov ecx,0xB
004026CE BE 44195500 mov esi,33.00551944 ; http://www.52pojie.cn
004026D3 8D7D CC lea edi,dword ptr ss:
004026D6 F3:A5 rep movs dword ptr es:,dword ptr ds>
004026D8 8D45 FC lea eax,dword ptr ss:
004026DB 50 push eax
004026DC 8B4D C8 mov ecx,dword ptr ss:
004026DF 51 push ecx
004026E0 68 02000080 push 0x80000002
004026E5 FF15 0C705200 call dword ptr ds:[<&advapi32.RegCreateK>; advapi32.RegCreateKeyW
004026EB 6A 2C push 0x2C
004026ED 8D55 CC lea edx,dword ptr ss:
004026F0 52 push edx ; ntdll.KiFastSystemCallRet
004026F1 6A 01 push 0x1
004026F3 6A 00 push 0x0
004026F5 68 C4195500 push 33.005519C4 ; Start Page
004026FA 8B45 FC mov eax,dword ptr ss:
004026FD 50 push eax
004026FE FF15 10705200 call dword ptr ds:[<&advapi32.RegSetValu>; advapi32.RegSetValueExW
00402704 8B4D FC mov ecx,dword ptr ss:
00402707 51 push ecx
00402708 FF15 14705200 call dword ptr ds:[<&advapi32.RegCloseKe>; advapi32.RegCloseKey
0040270E 8D55 FC lea edx,dword ptr ss:
00402711 52 push edx ; ntdll.KiFastSystemCallRet
00402712 8B45 C8 mov eax,dword ptr ss:
00402715 50 push eax
00402716 68 01000080 push 0x80000001
0040271B FF15 0C705200 call dword ptr ds:[<&advapi32.RegCreateK>; advapi32.RegCreateKeyW
00402721 6A 2C push 0x2C
00402723 8D4D CC lea ecx,dword ptr ss:
00402726 51 push ecx
00402727 6A 01 push 0x1
00402729 6A 00 push 0x0
0040272B 68 DC195500 push 33.005519DC ; Start Page
00402730 8B55 FC mov edx,dword ptr ss:
00402733 52 push edx ; ntdll.KiFastSystemCallRet
00402734 FF15 10705200 call dword ptr ds:[<&advapi32.RegSetValu>; advapi32.RegSetValueExW
0040273A 8B45 FC mov eax,dword ptr ss:
0040273D 50 push eax
0040273E FF15 14705200 call dword ptr ds:[<&advapi32.RegCloseKe>; advapi32.RegCloseKey
00402744 8D4D FC lea ecx,dword ptr ss:
00402747 51 push ecx
00402748 8B55 C8 mov edx,dword ptr ss:
0040274B 52 push edx ; ntdll.KiFastSystemCallRet
0040274C 68 01000080 push 0x80000001
00402751 FF15 0C705200 call dword ptr ds:[<&advapi32.RegCreateK>; advapi32.RegCreateKeyW
00402757 6A 2C push 0x2C
00402759 8D45 CC lea eax,dword ptr ss:
0040275C 50 push eax
0040275D 6A 01 push 0x1
0040275F 6A 00 push 0x0
00402761 68 F4195500 push 33.005519F4 ; Default_Page_URL
00402766 8B4D FC mov ecx,dword ptr ss:
00402769 51 push ecx
0040276A FF15 10705200 call dword ptr ds:[<&advapi32.RegSetValu>; advapi32.RegSetValueExW
00402770 8B55 FC mov edx,dword ptr ss:
00402773 52 push edx ; ntdll.KiFastSystemCallRet
00402774 FF15 14705200 call dword ptr ds:[<&advapi32.RegCloseKe>; advapi32.RegCloseKey
0040277A 5F pop edi ; kernel32.7C817067
0040277B 5E pop esi ; kernel32.7C817067
0040277C 8B4D F8 mov ecx,dword ptr ss: ; kernel32.7C817070
0040277F 33CD xor ecx,ebp
00402781 E8 2AFE0F00 call 33.005025B0
00402786 8BE5 mov esp,ebp
00402788 5D pop ebp ; kernel32.7C817067
00402789 C3 retn
这么一大坨虽然多但是确实有用,以下提供我个人的一个小窍门,我暂且叫他jmp大法,原理很简单,就是利用jmp的无条件跳转(容我装波B)
这样也是百分之百不报错的,我测试过的。
四.最后一点我感觉有点奇奇怪怪的,就是在做作业的时候,程序内有个网页预览框,如果先用Restorator把这个框框处理过了,然后OD载入再去改那个“课程介绍”
这个按钮,OD就会提示程序存在大量断点之类的,这搞得我也有点莫名其妙。再往后去,改注册表,改网站全部报错,就是保存完修改的程序,运行之后就会出现内存不能为read啊,之类的,所以后来做作业的同学,如果你遇到了和我同样的问题,我推荐你还是先去掉其他的弹窗,禁止改注册表,最后再改那个内置的预览框。这样比较好,行了,今天就和大家交流到这里了。
太神了 看不董 一起加油努力吧楼主 插眼,待传送 我来看看看 发表于 2016-8-16 21:38
插眼,待传送
你每天回复那么多,怎么传送?{:301_1008:} ForGot_227 发表于 2016-8-16 21:43
你每天回复那么多,怎么传送?
无限火力啊{:301_997:} 有待学习,慢慢来 厉害,反正我一个都看不懂 改注册表那部分我觉得直接retn是没问题的,毕竟那一整个函数出了改注册表就没干别的。我实际测试之后也是正常。而且从你改的jmp来看也是直接跳到了retn,和直接改retn应该没啥区别吧
页:
[1]