5

The036. 吾爱培训,《03:改头换面之修改版权和资源》讲师:Kido 进阶修改[消息弹窗]

 3 years ago
source link: https://www.52pojie.cn/thread-1587285-1-1.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
查看: 338|回复: 4

[讨论] The036. 吾爱培训,《03:改头换面之修改版权和资源》讲师:Kido 进阶修改[消息弹窗]

[复制链接]

楼主

发表于 2022-2-13 17:35

本帖最后由 chuiyan121 于 2022-2-13 21:00 编辑


The036. 吾爱培训,《03:改头换面之修改版权和资源》讲师:Kido 进阶修改[消息弹窗]
关于吾爱破解论坛官方入门教学培训第一期,我的学习记录,如有疑问欢迎交流指正。^_^
这节课是实战添加一个MessageBox弹窗,包含了添加API函数,OD自定义参数等,属于进阶内容。

1、还是用上一集The035修改后的程序1.exe作为例子,使用工具Stud_PE载入1.exe,在函数选项卡里找User32.dll,展开查找API函数MessageBoxA,会发现只有MessageBoxW  ord:511 rva: 0004D36C,其实这个是Unicode类型的弹窗,也可以使用,为了学习,还是自己添加一个MessageBoxA的函数吧。


2、添加API函数的方法为:右键->Add New Import,添加新的输入函数。


3、Dll选择,到系统盘(C盘)目录下的system32文件夹下,选择user32.dll文件打开。


4、Dll选择好了,接下来选择函数,在弹出的列表中选择MessageBoxA,按下添加到列表按钮,按添加按钮。


5、在函数列表底部,会出现刚刚添加的函数,函数信息为:MessageBoxA  ord:0 rva: 00084123。那么可以得出相对地址为:00084123(rva) + 00400000(基址) = 00484123(va)。


6、函数添加了,需要在区段中增加一块空的区域,存放调用弹窗的数据。大牛说在程序代码里找一块空的区域也行,不过新手还是重新开辟一个区段,防止修改失误程序崩溃。接下来在区段选项卡右键->New Section,创建新的节。


7、区段名自定义,原始大小和虚拟大小都改成1000,懒办法,其实不需要这么多空间。选择用空字节填充区段,增加。


8、OD载入1.exe,Alt+M打开内存窗口,双击新添加的区段到达数据窗口,记录地址00485000。


9、Alt+C到达CUP窗口,Ctrl+G转到00485000处,看到全是空数据。双击第一行,输入push 0,回车4下,4个空参数就添加好了,然后输入call [00484123]回车,添加调用MessageboxA函数。此时弹窗的框架就添加好了。


10、接下来添加弹窗的具体的参数如下:
push Style(0)
push Title
push Text
push hOwner(0)
Call [00484123]
通过上面的弹窗参数模板,第一个参数为Style(弹窗类型),设置为0;

第二个参数为Title(弹窗标题),设置为52PojieWoLaiLa。这里的内容不能直接输入,需要将内容存放在一个空的内存地址中,然后调用此地址。这里选择0048501A这个地址存放标题内容,方法为:在数据窗口Ctrl+G转到0048501A地址。

在数据窗口选择数据长度,Ctrl+E打开编辑窗口,由于调用的是MessageBoxA函数,因此使用ASCII类型输入内容,确定后添加完毕。

第三个参数为Text(弹窗正文内容),采用第二个参数同样的方法,添加对应内容为:I’m Chuiyan。

内容都添加完毕了,下面来调用这些内容。双击00485002处输入push 0048501A,然后下一个参数输入push 0048502A,这样参数就调用成功了。

第四个参数hOwner(窗口句柄),设置为0。第五个参数调用Message box函数,设置为:Call [00484123]。

所有参数改完后,根据程序运行的流程,弹窗完成后需要继续运行原程序,因此要在call后面需要jmp到原程序入口点0003A1B4(入口地址)+ 00400000(基址)= 0043A1B4(相对虚拟入口地址)。


11、以上弹窗内容全部设置完成,选择修改过的所有地方,保存文件为2.exe。发现程序可以运行,但并没有弹窗。


12、原因是程序的入口点还是原来的,并没有调用我们增加的弹窗。下面继续修改程序入口点为我们新增的内容,地址为:00485000(新入口地址)- 00400000(基址)= 00085000,或者用Rva<=>Raw工具如下图计算相对虚拟地址。将计算的结果00085000填到入口点(rav)处,按下保存到文件按钮,保存完毕。


13、运行2.exe,发现成功弹出消息窗口,确定后弹出原程序,添加弹窗功能完成。^_^


经过一顿折腾,发现一个小窍门,用PEID或者Stud_PE软件分析出来的地址,在OD里push、call、jmp时都需要加上基址,否则程序会调用不到内存崩溃,如果地址正确,OD里的注释处一般会出现对应的注释内容。


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK