用Ollydbg给exe文件添加一个对话框初探(图)

也许你正想者diy一个可执行文件,给一个汉化好的文件加上自己的对话框,或者直接加上帮助文本,或者显示破解 组织信息。

  详细过程

  也许你正想者diy一个可执行文件,给一个汉化好的文件加上自己的对话框,或者直接加上帮助文本,或者显示破解

  组织信息。总之是为一个exe文件添加一个对话框,功能类似关于窗口。在此举一个例子供大家参考,实际没什么意义,

  但仅仅是出于兴趣和技术探讨,给大家分享我的成功喜悦!

  我们以Pe_optimizer1.4 (以下简称PO)这个小程序为例来学习:

  1.预备知识对话框响应原理:

  当我们按下界面上的一个菜单或者一个按钮时,DialogBoxmA会调用窗口回调函数来处理,即把包含菜单命令

  的信息作为参数送给窗口回调函数,因为一般界面中菜单或按钮有多个,所以很明显会有下面的类型的代码:

  cmp ebx, xxxx1 比较按下的按钮ID是否等于xxxx1

  jnz short xxxxxxxx1 如果不是,跳过继续判断,xxxxxxxx1为下一个比较的地址

  call xxxxxxxx1 如果是,调用该按钮响应的操作

  cmp ebx, xxxx2

  jnz short xxxxxxxx2

  call xxxxxxxx2

  .....................

  或者

  cmp eax,xxxx1 比较点击的菜单ID是否等于xxxx1

  jz xxxxxxxx1 如果是,调用该按钮响应的操作

  cmp eax,xxxx2 不是,继续判断

  jz xxxxxxxx2

  ...................

  或者

  cmp ax,xxxx1 比较点击的菜单ID是否等于xxxx1

  jz xxxxxxxx1 如果是,调用该按钮响应的操作

  cmp ax,xxxx2 不是,继续判断

  jz xxxxxxxx2

  ...................

  也许还有其他形式,但总会类似以上列举的几种。

  本文的例子就是第一种情况。

  2. 添加资源按钮和对话框资源

  我们用XN Resource Editor 3.0来打开,然后在主界面对话框上添加一个按钮,ID改为505(16进制1F9);

  然后再添加一个对话框,将对话框的资源名(其实就是ID)称改为103 (16进制67),再在103对话框上添加

  一个按钮,ID与关于对话框中关闭的ID (即505)相同即可。最后保存关闭。

  运行程序看看,已经出现添加的按钮,但点击不会出现我们添加的对话框,因为还没有响应代码。

  3. 添加响应代码。

  我们用OD载入PO,右键-》查找-》所有模块间的调用,在最后几行我们看到两了DialogBoxmA这个函数

  找到的模块间的调用

  地址 反汇编 目标

  0040654E call GDI32.CreateFontA

  00406567 call

  004065D1 call USER32.SetDlgItemTextA

  00406610 call USER32.EndDialog

  00406634 call kernel32.ExitProcess

  00406665 call USER32.EndDialog

  004066D7 call USER32.DialogBoxmA

  0040675C push ebp (初始 CPU 选择)

  004067A1 call USER32.DialogBoxmA

  双击进入第一个看看,到这里:

  004066D7 E8 5CDFFFFF call

  004066DC EB 14 jmp short Pe_optim.004066F2

  004066DE 8B45 08 mov eax, [ebp+8]

  004066E1 A3 E0844000 mov [4084E0], eax

  004066E6 E8 F5FDFFFF call Pe_optim.004064E0

  004066EB EB 05 jmp short Pe_optim.004066F2

  004066ED E8 16FFFFFF call Pe_optim.00406608

  往上翻翻,目标出现了

  00406695 81FB F8010000 cmp ebx, 1F8 典型的ID对比

  0040669B 75 05 jnz short Pe_optim.004066A2 ID不正确则执行下一比较

  0040669D E8 66FFFFFF call Pe_optim.00406608 ID就转到00406608执行响应操作

  004066A2 81FB F6010000 cmp ebx, 1F6 第二个ID对比

  004066A8 75 05 jnz short Pe_optim.004066AF

  004066AA E8 89FCFFFF call Pe_optim.00406338

  004066AF 81FB F5010000 cmp ebx, 1F5

  004066B5 75 05 jnz short Pe_optim.004066BC

  004066B7 E8 C0ECFFFF call Pe_optim.0040537C

  004066BC 81FB F7010000 cmp ebx, 1F7

  004066C2 75 2E jnz short Pe_optim.004066F2

  我们用 资源编辑软件打开 PO,看看各按钮的ID,关于按钮ID为503,我们再看这段代码:

  004066BC 81FB F7010000 cmp ebx, 1F7 1F7是10进制503,正好是关于按钮的ID

  004066C2 75 2E jnz shortPe_optim.004066F2如果ID不是503,跳转到004066f2

  004066C4 6A 00 push 0 以下就是关于对话框的响应代码

  004066C6 68 3C664000 push Pe_optim.0040663C

  004066CB 8B45 08 mov eax, [ebp+8]

  004066CE 50 push eax

  004066CF 6A 66 push 66 66是关于对话框的ID,10进制102

  004066D1 A1 DC844000 mov eax, [4084DC]

  004066D6 50 push eax

  004066D7 E8 5CDFFFFF call

  004066DC EB 14 jmp short Pe_optim.004066F2

  004066DE 8B45 08 mov eax, [ebp+8]

  004066E1 A3 E0844000 mov [4084E0], eax

  004066E6 E8 F5FDFFFF call Pe_optim.004064E0

  004066EB EB 05 jmp short Pe_optim.004066F2

  004066ED E8 16FFFFFF call Pe_optim.00406608

  004066F2 8BC6 mov eax, esi

  004066F4 5E pop esi

  004066F5 5B pop ebx

  004066F6 5D pop ebp

  004066F7 C2 1000 retn 10

  …………………………………

  我们就从这里下手,找一段空间,添加一段类似以上这段代码,把

  004066BC 81FB F7010000 cmp ebx, 1F7

  中的1F7 改为你添加的按钮的ID,比如我们添加的按钮ID为1F9,即505,把

  004066CF 6A 66 push 66

  这句中的66改为你添加的对话框的资源ID,比如我们添加的为67,即103.

  其他更高深的代码本人就不能企及了,所以就直接仿造关于窗口。

  因此,本人所提到的方法不具有普遍的通用性,还希望抛砖引玉,高人指点,写出一些通用代码给我等菜鸟参考。

  接下来就是添加代码了

  我们首先找一处空间,文件末端有很多,所以就用那里的,选择一个比较好记忆的地址,如:0040B333,然后我们将上面

  比较的代码改成下面这样:

  00406693 /75 5D jnz short Pe_optim.004066F2

  00406695 81FB F8010000 cmp ebx, 1F8

  0040669B 75 05 jnz short Pe_optim.004066A2

  0040669D E8 66FFFFFF call Pe_optim.00406608

  004066A2 E9 8C4C0000 jmp Pe_optim.0040B333

  004066A7 90 nop

  004066A8 90 nop

  004066A9 90 nop

  004066AA 90 nop

  004066AB 90 nop

  004066AC 90 nop

  004066AD 90 nop

  004066AE 90 nop

  004066AF 81FB F5010000 cmp ebx, 1F5

  004066B5 75 05 jnz short Pe_optim.004066BC

  004066B7 E8 C0ECFFFF call Pe_optim.0040537C

  004066BC 81FB F7010000 cmp ebx, 1F7

  004066C2 75 2E jnz short Pe_optim.004066F2

  即从

  004066A2 81FB F6010000 cmp ebx, 1F6

  处直接跳转 0040B333,然后再把这段比较代码加上去即可,其他两句先nop掉。

  我们再 0040B333 处加上以下代码:

  0040B333 81FB F6010000 cmp ebx, 1F6 把上面nop掉的代码补回

  0040B339 75 05 jnz short Pe_optim.0040B3400040B340是我们新增的比较的地址

  0040B33B E8 F8AFFFFF call Pe_optim.00406338 这一句不变

  0040B340 81FB F9010000 cmp ebx, 1F9 1F9这是我们添加的按钮的ID

  0040B346 ^ 0F85 63B3FFFF jnz Pe_optim.004066AF 注1

  0040B34C 6A 00 push 0

  0040B34E 68 3C664000 push Pe_optim.0040663C

  0040B353 8B45 08 mov eax, [ebp+8]

  0040B356 50 push eax

  0040B357 6A 67 push 67 67是我们添加的对话框的ID

  0040B359 A1 DC844000 mov eax, [4084DC]

  0040B35E 50 push eax

  0040B35F E8 D492FFFF call

  0040B364 EB 14 jmp short Pe_optim.0040B37A

  0040B366 8B45 08 mov eax, [ebp+8]

  0040B369 A3 E0844000 mov [4084E0], eax

  0040B36E E8 6DB1FFFF call Pe_optim.004064E0

  0040B373 EB 05 jmp short Pe_optim.0040B37A

  0040B375 E8 8EB2FFFF call Pe_optim.00406608

  0040B37A 8BC6 mov eax, esi

  0040B37C 5E pop esi

  0040B37D 5B pop ebx

  0040B37E 5D pop ebp

  注1:0040B346 ^ 0F85 63B3FFFF jnz Pe_optim.004066AF这一句要掉转到下一个比较

  004066AF 81FB F5010000 cmp ebx, 1F5

  然后就是保存代码,测试程序,终于,我们添加的对话框显示出来了。

  没什么技术含量,请不要转载。

  经验总结

  只是尝试用一种另类的方法给exe文件加一个对话框,没有什么技术含量,希望那位高手能做一个全自动的工具,那才是我等所期待的。

  版权声明:

  本文纯属好玩, 转载请注明作者并保持文章的完整, 谢谢!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值