首页
社区
课程
招聘
[求助]有关对DLL文件打内存补丁的问题
发表于: 2008-4-8 08:56 5667

[求助]有关对DLL文件打内存补丁的问题

2008-4-8 08:56
5667
最近学习hijack,搞了个小软件,注册机制在dll中。EXE启动后,调用某功能的时候就会触发这个DLL,一触发这个DLL,(DLL加了UPX壳,脱壳后,DLL原有功能就失效,用OD打内存补丁成功。)就会触发注册。因为软件用到了机器码和外部注册文件。
  经过我的分析,他的原理是这样的:先算机器码,存在内存一处(绝对地址=基址(DLL会改变,)+相对地址),由于直接对判断的jz,jnz等强制跳转,也就是爆破,会失去原dll所有功能,考虑patch机器码,当机器码生成完毕后,我手动修改机器码,运行软件,patch成功(对应机器码的DAT文件我有)!!!
1D203FE5    E8 929EFFFF     call    1D1FDE7C   <--------------计算机器码的地方  //F7跟进
1D203FEA    8B55 9C         mov     edx, dword ptr [ebp-64]   修改时机<-------------机器码放入EDX以便后面运算。
1D203FED    8D45 F8         lea     eax, dword ptr [ebp-8]   修改时机

//F7------------------关键算法,算机器码
1D1FDEB2    FF37            push    dword ptr [edi]
1D1FDEB4    8D45 EC         lea     eax, dword ptr [ebp-14]
1D1FDEB7    33D2            xor     edx, edx
1D1FDEB9    8A16            mov     dl, byte ptr [esi]
1D1FDEBB    C1EA 04         shr     edx, 4
1D1FDEBE    83E2 0F         and     edx, 0F
1D1FDEC1    8A92 58B6201D   mov     dl, byte ptr [edx+1D20B658]
1D1FDEC7    E8 5468FEFF     call    1D1E4720
1D1FDECC    FF75 EC         push    dword ptr [ebp-14]
1D1FDECF    8D45 E8         lea     eax, dword ptr [ebp-18]
1D1FDED2    8A16            mov     dl, byte ptr [esi]
1D1FDED4    80E2 0F         and     dl, 0F
1D1FDED7    81E2 FF000000   and     edx, 0FF
1D1FDEDD    8A92 58B6201D   mov     dl, byte ptr [edx+1D20B658]
1D1FDEE3    E8 3868FEFF     call    1D1E4720
1D1FDEE8    FF75 E8         push    dword ptr [ebp-18]
1D1FDEEB    8BC7            mov     eax, edi
1D1FDEED    BA 03000000     mov     edx, 3
1D1FDEF2    E8 C169FEFF     call    1D1E48B8
1D1FDEF7    46              inc     esi
1D1FDEF8    FECB            dec     bl
1D1FDEFA  ^ 75 B6           jnz     short 1D1FDEB2

1D1FDEFC    33C0            xor     eax, eax
1D1FDEFE    5A              pop     edx
1D1FDEFF    59              pop     ecx
1D1FDF00    59              pop     ecx
1D1FDF01    64:8910         mov     dword ptr fs:[eax], edx
1D1FDF04    68 1EDF1F1D     push    1D1FDF1E
1D1FDF09    8D45 E8         lea     eax, dword ptr [ebp-18]   --这里,修改时机
1D1FDF0C    BA 02000000     mov     edx, 2                     --这里,修改时机
1D1FDF11    E8 4E66FEFF     call    1D1E4564                  --这里,修改时机
1D1FDF16    C3              retn  //返回-----------------1D203FEA

我的原本的意思,就是当机器码生成完毕,就修改机器码,或者当调用这个DLL,代码解压完毕,计算出基址,算出内存修改地址,直接patch,然后设为只读不可写,同样可以达到目的。
小菜我只写过EXE的内存补丁,DLL的,困啊!!!   现在的机制是1d1f0000   再开他就便19700000了或者1970d0000了,困难。。。
哪位大大能帮帮我....

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 22
活跃值: (443)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
用DLL劫持呢 呵
2008-4-8 13:22
0
雪    币: 256
活跃值: (748)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
HMODULE GetModuleHandle(
  LPCTSTR lpModuleName   // module name
);

获得指定的dll的基址+相对地址
2008-4-8 17:54
0
游客
登录 | 注册 方可回帖
返回
//