给exe添加一个启动时的消息框
本帖最后由 银太 于 2013-10-13 00:48 编辑前几分钟刚注册的吾爱破解论坛 现在发个贴子,呵呵,新手,不知道会不会有违反版规的情况 {:1_907:}
先说下我说的这个教程是啥吧,运行计算器后先弹出一个消息框
点击确定然后计算器正常出现
好了,废话不多说,开始了,文字加图片。
使用的软件是:任意版本OD,winxp系统自带计算器。这两个东西应该都很好找吧
首先用OD载入计算器,,这个不会的话建议不要往下看了
然后我的od就停在入口点了,我的这个是 1012475 这个位置如图
我们复制从前三行的内容。选中前三行-右键复制-到剪切板。 然后打开记事本ctrl+v粘贴进去,记事本这个东西很有用啊
回到OD,在程序结尾部分找一段0区域,就是结尾处空白的地方 ,HEX数据是 00 的地方 (我不知道0区域是不是这么说的,反正我是这么理解的)
右键-查找-二进制字串。 HEX那里填好多0然后确定会很快找到
如果找到了但是看到后面还有数据的(后面HEX还有不是00的),可以右键-查找-下个(快捷键ctrl+l)找到尾部的00
我找到的00区域是从 10136AF处开始的,你也可以直接ctrl+g定位到这里
我们空几行,别离人家程序太近嘛,呵呵。大约空个几行就好了。
我们从10136B4 开始反汇编
push 0
PUSH 10136B6
PUSH 10136BB
PUSH 0
妈呀太费事了,想不到写个东西这么费劲 ……半天写这么点。。好吧我坚持下,下面的稍微不这么详细了,太费时间
现在到od-右键-查找-所有模块间的调用
出来的对话框点一下目标文件,排序一下好找。我们找 USER32.MessageBoxW
找到第一个双击,我的第一个的地址是 100209C 我们在这个地址上空格,复制这段文字ctrl+v粘贴进记事本 ,我的是CALL DWORD PTR DS: 复制到记事本以后用。有可能不一样,按你的就行
然后回到刚刚汇编的那个地方,ctrl+g 定位到 10136B4
紧接着继续汇编,空格,粘贴刚刚复制的东西(我的是CALL DWORD PTR DS:)
这样弹出消息框的部分就完成了,四个push加一个call就是弹消息框的,忘了这就话是谁说的了
然后我们继续接着汇编,第一次粘贴到记事本里面的东西,就是od在入口点那三行
PUSH 70
PUSH 010015E0
CALL 010127C8
写完这三行以后加一句jmp 1012481就是再跳到运行计算器程序那边
我的这个语文不好啊,写的顺序有点乱,现在双击 右边寄存器那边的 EIP 就到了程序入口点
我们选中前三行,右键-二进制-用 NOP 填充
然后选中填充的第一行,也就是入口点 汇编 jmp 10136B4也就是我们找到的00地方汇编的第一个地址
到这里可能有些人就知道是怎么回事了。 程序运行,先跳到我们的程序,执行弹出消息框,然后再回到原程序继续执行,就是这么个过程
然后你可以试一下,右键复制到可执行文件,所有修改-全部复制,再右键-保存文件。自己保存,执行一下弹出一个乱码的对话框
因为我们没有指定它弹出的内容。
好,我们继续,关掉对话框继续汇编
ctrl+g 定位到 刚刚汇编的地方10136B4
隔着我们写的汇编,再空几行我们选 10136DD
从10136DD 多选几行,大概三十行吧,选好后右键-二进制-编辑,在UNICODE里面键入“hello world” (这么经典的东西。)如果刚刚你选少了就装不下这么多字了。
然后确定。 我们把刚刚的
push 0
PUSH 10136B6
PUSH 10136BB
PUSH 0
改一下,改成
push 0
PUSH 10136DD
PUSH 10136DD
PUSH 0
第二次push的是消息框的标题,第三次push的是消息框的内容,我们为了省事就写一样的(第一是按钮样式,自己完了可以改 1、2、3、4、瞎看看。第四个不要乱改了。似乎是窗口句柄还是父窗口句柄忘了)
然后再复制到可执行文件就可以弹出一个 hello world 的消息框了。教程结束好费劲。
这个方法对大多数windows程序应该都可以添加消息框。
至于里面的东西自己要学会,收人以鱼不如收人以渔。
第一次写,各位见笑了,不足之处请批评了。
最后附上本人的计算器..方便不是XP系统的或者无聊删了计算器的。
这附件咋还要CB啊。。免CB http://good.gd/2750214.htm
关于显示中文的问题,OD的二进制编辑似乎有问题,用别的东西查一下编码就好了。“你好”的UNICODE 是 604F7D59 填这个就可以现实"你好"的中文了。帖子再发一个转换字符的工具
其实写了这么多也就改了两个地方
01012475 > $ /E9 3A120000 JMP 010136B4
0101247A |90 NOP
0101247B |90 NOP
0101247C |90 NOP
0101247D |90 NOP
0101247E |90 NOP
0101247F |90 NOP
01012480 |90 NOP
01012481 > |33DB XOR EBX,EBX
010136B1 00 DB 00
010136B2 00 DB 00
010136B3 00 DB 00
010136B4 >6A 00 PUSH 0
010136B6 .68 DD360101 PUSH 010136DD
010136BB .68 EA360101 PUSH 010136EA
010136C0 .6A 00 PUSH 0
010136C2 .FF15 A8110001 CALL DWORD PTR DS:
010136C8 .6A 70 PUSH 70
010136CA .68 E0150001 PUSH 010015E0
010136CF .E8 F4F0FFFF CALL 010127C8
010136D4 .^ E9 A8EDFFFF JMP 01012481
010136D9 00 DB 00
010136DA 00 DB 00
010136DB 00 DB 00
010136DC 00 DB 00
010136DD .6800 6500 6C00 6C00 6F00 0000 ; 这个右键-二进制-编辑 在HEX那里粘贴
010136E9 00 DB 00
010136EA .60 4F 7D 59 00 ; 这个右键-二进制-编辑 在HEX那里粘贴
010136EF 00 DB 00
010136F0 00 DB 00
最后这俩图是所有修改过的地方
免CBhttp://good.gd/2750343.htm (字串编码查看器.rar)
q40989795 发表于 2015-6-27 16:20
不要乱下结论.
MessageBox 不管A或W"Unicode" 编码如果显示乱码就使用"ANSI"编码
我记得不知道在哪里见过一句 用vc使用MessageBox 的话 如果是英文就调用 MessageBoxA如果是中文就自动调用MessageBoxW 我再去查查看 q40989795 发表于 2015-6-27 16:20
不要乱下结论.
MessageBox 不管A或W"Unicode" 编码如果显示乱码就使用"ANSI"编码
嗯多谢指教了 自己亲自试了MessageBoxA 可以弹出中文 自己抢沙发了。第一次沙发{:1_918:} 这尼玛什么节奏感情是奔着出教程来的
支持~ 板凳?某子玩意、?下载看看先? 挺好玩的
這樣子可以加入提示
就算是非原創軟件也能提醒那些小白該怎麼操作了
我的为什么不能显示成中文或者是什么的,只要输入就是跟乱码一样。 可以加入提示 嘛程序写的都可以么。 看样子也是个人才啊 牛人,膜拜