文章标题】: 菜鸟脱壳+破解外挂
【文章作者】: 未注册!
【软件名称】: 飞飞简单辅助5.0.6(单开版)
【下载地址】:自己搜索
【加壳方式】: 未知壳!
【使用工具】: OD WinHex 12.75SR-6汉化版
【操作平台】: windows xp sp2
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】第一步脱壳:查壳,什么都没有。。。!好,OD载入
壳入口:
0040101B >- E9 45C80700 jmp 飞飞简单.0047D865
00401020 B4 09 mov ah,9
00401022 BA 0B01CD21 mov edx,21CD010B
00401027 B4 4C mov ah,4C
00401029 CD 21 int 21
0040102B 70 61 jo short 飞飞简单.0040108E
0040102D 636B 65 arpl word ptr ds:[ebx+65],bp
00401030 64:2062 79 and byte ptr fs:[edx+79],ah
00401034 206E 73 and byte ptr ds:[esi+73],ch
00401037 70 61 jo short 飞飞简单.0040109A
00401039 636B 24 arpl word ptr ds:[ebx+24],bp
0040103C 40 inc eax
0040103D 0000 add byte ptr ds:[eax],al
0040103F 0050 45 add byte ptr ds:[eax+45],dl
00401042 0000 add byte ptr ds:[eax],al
00401044 4C dec esp
00401045 0102 add dword ptr ds:[edx],eax
00401047 00A3 FF9B0500 add byte ptr ds:[ebx+59BFF],ah
0040104D 0000 add byte ptr ds:[eax],al
0040104F 0000 add byte ptr ds:[eax],al
00401051 0000 add byte ptr ds:[eax],al
00401053 00E0 add al,ah
00401055 000F add byte ptr ds:[edi],cl
00401057 010B add dword ptr ds:[ebx],ecx
00401059 010400 add dword ptr ds:[eax+eax],eax
0040105C 0000 add byte ptr ds:[eax],al
咱们F8一下,哈哈来到真正的壳入口!什么壳自己看吧,
0047D865 9C pushfd
0047D866 60 pushad
0047D867 E8 00000000 call 飞飞简单.0047D86C
0047D86C 5D pop ebp
0047D86D B8 07000000 mov eax,7
0047D872 2BE8 sub ebp,eax
0047D874 8DB5 A3FEFFFF lea esi,dword ptr ss:[ebp-15D]
0047D87A 8B06 mov eax,dword ptr ds:[esi]
0047D87C 83F8 00 cmp eax,0
0047D87F 74 11 je short 飞飞简单.0047D892
0047D881 8DB5 CBFEFFFF lea esi,dword ptr ss:[ebp-135]
0047D887 8B06 mov eax,dword ptr ds:[esi]
0047D889 83F8 01 cmp eax,1
0047D88C 0F84 4B020000 je 飞飞简单.0047DADD
0047D892 C706 01000000 mov dword ptr ds:[esi],1
0047D898 8BD5 mov edx,ebp
0047D89A 8B85 5FFEFFFF mov eax,dword ptr ss:[ebp-1A1]
0047D8A0 2BD0 sub edx,eax
0047D8A2 8995 5FFEFFFF mov dword ptr ss:[ebp-1A1],edx
0047D8A8 0195 8FFEFFFF add dword ptr ss:[ebp-171],edx
0047D8AE 8DB5 D3FEFFFF lea esi,dword ptr ss:[ebp-12D]
下面咱们用ESP定律法到达OEP,程序C++的,呵呵!脱壳修复成功!
但运行的时候出现数据错误:Invalid data in the file!
此类数据效验简单,大家应该都明白!不明白最好在坛子里找找!很容易
用户工具(十六进制编辑工具):WinHex 12.75SR-6汉化版!不会照着我下面操作^_^;
程序OEP:
0040389F 55 push ebp
004038A0 8BEC mov ebp,esp
004038A2 6A FF push -1
004038A4 68 F8724000 push 飞飞简单.004072F8
004038A9 68 04554000 push 飞飞简单.00405504
004038AE 64:A1 00000000 mov eax,dword ptr fs:[0]
004038B4 50 push eax
004038B5 64:8925 0000000>mov dword ptr fs:[0],esp
004038BC 83EC 58 sub esp,58
004038BF 53 push ebx
004038C0 56 push esi
004038C1 57 push edi
004038C2 8965 E8 mov dword ptr ss:[ebp-18],esp
004038C5 FF15 48704000 call dword ptr ds:[407048] ; kernel32.GetVersion
004038CB 33D2 xor edx,edx
004038CD 8AD4 mov dl,ah
004038CF 8915 94BA4000 mov dword ptr ds:[40BA94],edx
004038D5 8BC8 mov ecx,eax
004038D7 81E1 FF000000 and ecx,0FF
004038DD 890D 90BA4000 mov dword ptr ds:[40BA90],ecx
004038E3 C1E1 08 shl ecx,8
004038E6 03CA add ecx,edx
004038E8 890D 8CBA4000 mov dword ptr ds:[40BA8C],ecx
004038EE C1E8 10 shr eax,10
004038F1 A3 88BA4000 mov dword ptr ds:[40BA88],eax
004038F6 33F6 xor esi,esi
打开WinHex 12.75SR-6汉化版!放进外挂原程序,先把进度条拉到最后,最往上拉,找到全为0的地方!右键选择选块开始,最到代码最后一个代码选块结束!点上面的复制!
继续打开脱了壳的程序:拉到最后一个代码处,粘贴---保存----OK,试程序运行-----成功!!
此时脱壳修复完成,并成功运行,下面就开始破解了,哈哈!
先说下我的思路!此程序要登陆,那么只要成功登录就成功便用了!于是着手研究,但是进去才知分析的代码太多了,不实用!代码通通是先比较用户大于几位,密码不能小于几位,最进行网络返回比较:比如用户名已存在等!特多代码。
最后发现登陆旁边有个呼出!哈哈。这不是关键了吗!已然有呼出,那么我们可以跳过登录,直接呼出外挂程序不就行了!经验证此想法是可行的,,,想想如果作者做成进游戏后最按快捷键呼出外挂。可就得继续分析上面的第一个想法了。。。。。。下面操作!!
载入脱壳后的程序,用F12暂停法来到关键处:咱现一步一步来!
F9运行程序!点呼出!显示出错:请先登陆。。哈哈!F12暂停之!
最点调用堆栈!来到代码处:
100626A0 FF15 A0260C10 call dword ptr ds:[<&USER32.MessageBo>; user32.MessageBoxA
100626A6 5F pop edi
100626A7 83F8 03 cmp eax,3
100626AA 5E pop esi
100626AB 75 0F jnz short krnln.100626BC
100626AD 8B4C24 68 mov ecx,dword ptr ss:[esp+68]
100626B1 B8 02000000 mov eax,2
以上代码是系统的领空,咱们返回到程序的领空
F8单步走返回到程序的领空:
004382AA E8 7F170100 call dumped_.00449A2E 出现请先登陆对话框!
004382AF 83C4 28 add esp,28
004382B2 E9 16020000 jmp dumped_.004384CD
004382B7 833D D00CE500 0>cmp dword ptr ds:[E50CD0],1
004382BE 0F85 F4000000 jnz dumped_.004383B8
004382C4 FF35 D40CE500 push dword ptr ds:[E50CD4]
004382CA 68 57C44000 push dumped_.0040C457
004382CF B9 02000000 mov ecx,2
004382D4 E8 1BFFFFFF call dumped_.004381F4
004382D9 83C4 08 add esp,8
向上看看,有没有跳转可以跳过此对话框的! 来到:
00438250 55 push ebp
00438251 8BEC mov ebp,esp
00438253 81EC 10000000 sub esp,10
00438259 6A FF push -1
0043825B 6A 06 push 6
0043825D 68 F20B0116 push 16010BF2
00438262 68 01000152 push 52010001
00438267 E8 E6170100 call dumped_.00449A52
0043826C 83C4 10 add esp,10
0043826F 8945 F8 mov dword ptr ss:[ebp-8],eax
00438272 837D F8 00 cmp dword ptr ss:[ebp-8],0 标志位!
00438276 0F85 3B000000 jnz dumped_.004382B7 关键跳!
0043827C 68 04000080 push 80000004
00438281 6A 00 push 0
00438283 68 45C44000 push dumped_.0040C445
00438288 68 01030080 push 80000301
0043828D 6A 00 push 0
0043828F 68 30000000 push 30
00438294 68 04000080 push 80000004
00438299 6A 00 push 0
0043829B 68 4AC44000 push dumped_.0040C44A
004382A0 68 03000000 push 3
004382A5 BB 00030000 mov ebx,300
004382AA E8 7F170100 call dumped_.00449A2E 出现请先登陆对话框
004382AF 83C4 28 add esp,28
004382B2 E9 16020000 jmp dumped_.004384CD
004382B7 833D D00CE500 0>cmp dword ptr ds:[E50CD0],1
004382BE 0F85 F4000000 jnz dumped_.004383B8
004382C4 FF35 D40CE500 push dword ptr ds:[E50CD4]
004382CA 68 57C44000 push dumped_.0040C457
004382CF B9 02000000 mov ecx,2
004382D4 E8 1BFFFFFF call dumped_.004381F4
004382D9 83C4 08 add esp,8
00438272 837D F8 00 cmp dword ptr ss:[ebp-8],0 标志位!
咱们把的0修为1,运行试试!成功了,呵呵!咱们也可把JNZ修改也行!上面的CALL修改也行!!
有很多种方法,自己慢慢调试就清楚了!
总结:完成得差不到了!!就是程序运行的时候随便输个用户名及密码,填一个也行!密码不填!!点呼出就行了!!,经测试可用!!
但程序退出的有出错,这并不影响使用!!想得完美的自己调试了!!
谢谢你有耐心得完,希望你也能学到东西!!失误之处还望各位大侠指教!!!
[课程]Linux pwn 探索篇!