摘要:本文主要向大家介绍了C/C++知识点之手动脱加密壳(导入表hash 花指令),通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍了C/C++知识点之手动脱加密壳(导入表hash 花指令),通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
1.载入 OD
发现esp定律就可以搞定
找OEP
看到了一个函数但od没有注释 可能加密
先去函数地址下断
函数出来了 说明oep没找错
到这里那就去IAT下硬件写入断点
重新运行程序下断成功
这里就是IAT 填充函数了
这里先讲下加密壳原理
1。先遍历要加密的程序的IAT然后把一个个函数的名称计算下hash 把算出来的hash保存起来
2。加密IAT
3.运行程序时没有壳的情况下一般是加载器帮我们填充IAT 有壳程序 就是壳来做了
4.因此一定会做的一件事情是遍历 那些用到的模块 然后一个个算函数名的hash如果相等 说明是这个 程序要用到的api
5.找了api 先把api地址保存到一个地方
6.然后把加密后的地址填充IAT
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
到了这里就只能f7一直跟 按着f7不放会发现一些 函数名称 ![](//i2.51cto.com/images/blog/201805/26/2735ac7b81403f526933fe81f55bb562.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
同时它会一个个的字符取出来 (很定是一个字符串拷贝 那就有什么用呢)可能在算hash
断到跳转那也就是说明字符串取完了
看看它要干嘛
继续f7 发现要比对hash
到这里思路也就清析了 同时推断正确
那就在他相等的地方下断 其它断点可以去掉
f9 下断成功
到了这里也就是说找到了一个要填充的api 离最后不远了
盯着寄存器 慢慢看
加模块基址了 说明很快要填充了
单步 果然是一个api
续断盯着寄存器
又给了edx
又入栈了
到拷贝了 这里就步过了
出栈了
断续f7终于回到了起点
到了这里 就要推出它真的api地址放哪
esc回退 写下来
去掉花指令
002E0502 8B4D A8 MOV ECX,DWORD PTR SS:[EBP-0x58]edx 保存真正api地址 002E14DC 895401 FC MOV DWORD PTR DS:[ECX+EAX-0x4],EDX ; 04.00475048002E0D77 8B57 04 MOV EDX,DWORD PTR DS:[EDI+0x4]002E0949 0355 E4 ADD EDX,DWORD PTR SS:[EBP-0x1C] ; 04.00400000002E0EE2 8B45 A8 MOV EAX,DWORD PTR SS:[EBP-0x58]eax保存 加密的地址 放在iat中 002E0895 8902 MOV DWORD PTR DS:[EDX],EAX
这里就用了一个巧合 用到ecx
把
MOV DWORD PTR DS:[ECX+EAX-0x4],EDX 修改成 MOV ECX,EDX
MOV EAX,DWORD PTR SS:[EBP-0x58] 修改成 MOV EAX, ECX
重新运行程序
这里有点坑 可能修改有先后(因为我用的是查找opcode )
在我这里先修改这个
再修改这个
修复IAT
正常运行
笔记
OEP 0047148B 55 PUSH EBP0047148C 8BEC MOV EBP,ESP0047148E 6A FF PUSH -0x100471490 68 28514700 PUSH 04.0047512800471495 68 58214700 PUSH 04.004721580047149A 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]004714A0 50 PUSH EAX ; 04.0047148B004714A1 64:8925 0000000>MOV DWORD PTR FS:[0],ESP004714A8 83EC 58 SUB ESP,0x58004714AB 53 PUSH EBX004714AC 56 PUSH ESI004714AD 57 PUSH EDI004714AE 8965 E8 MOV DWORD PTR SS:[EBP-0x18],ESP004714B1 FF15 80504700 CALL DWORD PTR DS:[0x475080]004714B7 33D2 XOR EDX,EDX ; 04.<ModuleEntryPoint> 写入iat002E14D8 8D6424 04 LEA ESP,DWORD PTR SS:[ESP+0x4]002E14DC 895401 FC MOV DWORD PTR DS:[ECX+EAX-0x4],EDX ; kernel32.HeapCreate002E14E0 ^ E9 15F2FFFF JMP 002E06FA002E14E5 FF75 F4 PUSH DWORD PTR SS:[EBP-0xC]002E14E8 ^ E9 54F7FFFF JMP 002E0C41002E14ED 031E ADD EBX,DWORD PTR DS:[ESI]002E14EF E8 61FAFFFF CALL 002E0F55002E14F4 5A POP EDX ; kernel32.HeapCreate002E14F5 ^ E9 C0F8FFFF JMP 002E0DBA002E14FA 837D AC 01 CMP DWORD PTR SS:[EBP-0x54],0x1002E14FE ^ E9 0AFAFFFF JMP 002E0F0D002E1503 8D6424 04 LEA ESP,DWORD PTR SS:[ESP+0x4]002E1507 59 POP ECX002E0502 8B4D A8 MOV ECX,DWORD PTR SS:[EBP-0x58]002E14DC 895401 FC MOV DWORD PTR DS:[ECX+EAX-0x4],EDX ; 04.00475048002E0D77 8B57 04 MOV EDX,DWORD PTR DS:[EDI+0x4]002E0949 0355 E4 ADD EDX,DWORD PTR SS:[EBP-0x1C] ; 04.00400000002E0EE2 8B45 A8 MOV EAX,DWORD PTR SS:[EBP-0x58]002E0895 8902 MOV DWORD PTR DS:[EDX],EAX ; 填充IAT
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号