好友
阅读权限20
听众
最后登录1970-1-1
|
作者声明 ..只是爱好,没有其他目的 失误之处,还请各位赐教 一时兴起吧,看到一个程序的 是加的 ASP的壳 ,我的想法就是 不脱壳,直接用od 能够保存下来,
好下面开始演示.................
很简单的 asp 直接esp 定律到达OEP 不过呢,建议大家用多种方式找到这个oep 练手嘛,可以用
单步跟踪 一步步跟下去,还可以用 查找所有命令序列 popad 这是一个出口,用ctrl+ L下个寻找
oep 就不说了比较简单,下面进入正题开始讲解...
004053AF 61 popad //关键句///这里是 popad 下面就是进入到 程序的oep
004053B0 75 08 jnz Xcrackme_.004053BA
004053B2 B8 01000000 mov eax,0x1
004053B7 C2 0C00 retn 0xC
004053BA 68 00104000 push crackme_.00401000 //把oep 搞进去..........
004053BF C3 retn ///返回到OEP洛........
////////////////*********
进入到关键点位置
004011FC |. E8 99000000 call crackme_.0040129A ; \GetDriveTypeA
00401201 |. 83F8 05 cmp eax,0x5 //////程序是这个位置比较 eax 跟5 是否相等,根据我们调试得到 上面CALL 返回EAX 是等于3
00401204 |. 74 17 je Xcrackme_.0040121D ////通俗点说 je 相等咋跳,让 eax 跟 比较的值相等就可以跳过错误 ,,
00401206 |. 6A 30 push 0x30 ; /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
00401208 |. 68 14304000 push crackme_.00403014 ; |Title = "FaNt0m's CrackMe #3 -- CD Check"
0040120D |. 68 40304000 push crackme_.00403040 ; |Text = "Error finding CDROM"
00401212 |. 6A 00 push 0x0 ; |hOwner = NULL
00401214 |. E8 51000000 call crackme_.0040126A ; \MessageBoxA
///////////////可以看汇编代码得出 00401201 位置机器码为 83 00401202 机器码为 F8 00401203的位置为 05
///////////////嘎嘎嘎 是不是可以通过 修改00401203的数据 05 改成为03就可以实现可实现让JE跳转呢.................................原理不解释 相信大家懂点汇编就能理解
//////*************************************************
开始做坏事了............
///接着我们就要在壳的外面进入oep的时候做手脚了
先在下面代码出找一段空位置 直接 90掉 nop
我找的代码是
004053AF 61 popad
004053B0 75 08 jnz Xcrackme_.004053BA /// 这是入口 先让这句跳转到 我们修改代码位置
004053B0 /E9 B3010000 jmp crackme_.00405568 ///跳转向的位置 是空代码,大家可以使劲随便插......
004053B5 |90 nop
004053B6 |90 nop
004053B7 |C2 0C00 retn 0xC
00405568 90 nop
00405569 90 nop
0040556A 90 nop
0040556B 90 nop
0040556C 90 nop ///空代码
接着就需要忘内存里面写数据了........
代码是
mov byte ptr [00401203],03 ///这里就把数据写进去 上面我们解说的关键位置 继续一个jmp 就可以飞回去了
004053BA 68 00104000 push crackme_.00401000 //就是跳到这个位置来 要是不是跳到这个位置 oep都没了哈哈
jmp 004053BA ///
修改好的就是
00405568 C605 03124000 0>mov byte ptr ds:[0x401203],0x3
0040556F ^ E9 46FEFFFF jmp crackme_.004053BA
这样就可以了,接着我们进去里面看看我们刚刚修改的数据修改没..
一路狂飙 直接到达目的地
004011F7 /$ 55 push ebp
004011F8 |. 8BEC mov ebp,esp
004011FA |. 6A 00 push 0x0 ; /RootPathName = NULL
004011FC |. E8 99000000 call crackme_.0040129A ; \GetDriveTypeA
00401201 |. 83F8 03 cmp eax,0x3 ///这里就是刚刚我们写进去的数接着直接用 od 就能保存 不需要脱壳的
00401204 |. 74 17 je Xcrackme_.0040121D
00401206 |. 6A 30 push 0x30 ; /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
00401208 |. 68 14304000 push crackme_.00403014 ; |Title = "FaNt0m's CrackMe #3 -- CD Check"
0040120D |. 68 40304000 push crackme_.00403040 ; |Text = "Error finding CDROM"
00401212 |. 6A 00 push 0x0 ; |hOwner = NULL
00401214 |. E8 51000000 call crackme_.0040126A ; \MessageBoxA
00401219 |. C9 leave
以上方法仅供参考,我觉得理解了 用到的地方还是比较多的哈0................................
在直接用od 就能保存了.................以上属于作者本人个人爱好,一个很傻的分析,还请各位大侠不要笑话小弟.......毕竟我一直在努力嘛...
JOOG 睡觉了............
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|