刚开通一博客,就写写文章,没什么技术含量,大神飘过
这是一个加壳程序 , 首先用PEid查看是
,
用od 载入 , 入口是 这样的
我们用内存段法脱壳 , Alt+M打开进程空间,在资源段中F2下断,
shift +F9直接运行, 断在下面的地方
然后再Alt+M, 在代码段F2下断,
shift +F9运行, 断在下面的地方
看到eax中的值了吗?保存的是api的地址, 然后再F8单步, 看到下面的循环了吗 ? 在jmp后面下段 , F9运行
看到了吧, 解密IAT表 , 一步步单步, 到这里是数据段
还是在解密, 然后再Alt+M中在代码段中下F2断点 , Shift+F9运行, 到达OEp
一般现在肯定是loadPE dump下程序, 然后修复IAT表, 好,然后运行不了, OD载入看看 , F8到达这个call,
然后F7步入,
看到了吧, call的是003A18AB, 这个是不存在的 , 可以F7跟进出看看
看到了吧 , 我们打开源程序, 跟到上面的call看看
发现是有数据的, 这段肯定是定位IAT表的, 好然后分析分析 是如何做的
中间有一个算法 是(eax*2)<<1, 明白了原理, 最后写一个shellcode修复一下。
pushad
mov ebp,003A0000
mov esi,dword ptr ss:[ebp+0x1922]
add esi,ebp
@LOOP_IAT:
mov eax,dword[esi]
xor edx,edx
push 2
pop ecx
mul ecx
shr eax,1
mov ecx,dword[esi+4]
test ecx,ecx
je short @Exit
@IAT:
cmp word[eax],0E890
je short @FF25
cmp word[eax],25FF
je short @FF25
mov word[eax-6],15FF
jmp short @CC
@FF25:
mov word[eax-6],25FF
@CC:
mov dword[eax+2-6],ecx
add esi,0x8
jmp short @LOOP_IAT
@Exit:
popad
也可以写一个脚本修复一下, 内容跟上面的差不多, 这里就不写了
好了就这么多了