一个脱壳中修复IAT表的列子

刚开通一博客,就写写文章,没什么技术含量,大神飘过

 

这是一个加壳程序 , 首先用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    
   

也可以写一个脚本修复一下, 内容跟上面的差不多, 这里就不写了

好了就这么多了

 

你可能感兴趣的:(一个脱壳中修复IAT表的列子)