学习笔记
简单破解一个易语言编写的弹窗程序
1.简单编写一个易语言弹窗程序
(1)打开易语言程序
(2)新建windows窗口程序
(3)拖动标签,编辑框,按钮基本组件构成简易弹窗界面
(4)分别点击 标签,编辑框,按钮 修改名称,内容
(5)双击按钮,编写简单逻辑:当按钮点击时,判断编辑框内容是否为“123456”,是弹出“成功“弹窗,否弹出"失败"弹窗
(6)保存弹窗程序在桌面或自定义文件夹
2.破解
(1)将程序拖入od运行,弹出程序,按CTRL+G快捷键,输入GetWindowTextA,按确认,汇编代码跳转到程序开头。
(2)按F2下断点,运行程序,程序停止在等待编辑框输入阶段.
(3)查看堆栈,获取标签句柄,对断点添加附加条件,过滤标签断点。
(4)按SHIFT+F2快捷键,输入[esp+4!= (...) ] , ...部分填上程序断下时标签句柄对应数值,也就是堆栈esp+4位置的数值。
(5)添加附加条件成功时,对应断点处变色。
(6)重新运行程序,输入随意数字内容1111,点击按钮,这次汇编代码停顿位置不会是标签处
(7)按CTRL+F8进行单步运行直到程序弹出失败弹窗,右键使用插件im-004011c1,给程序添加注释,此处为失败弹窗的call
(8)发现上面有一个call出现变化,可能是成功的call,对其添加注释
(9)往上翻看汇编代码,找出函数头部,下断点,添加注释
(10)重新载入、运行程序,将之前的第一个断点取消,运行程序,输入数字,点击按钮,汇编代码停在函数头部
(11)F8单步运行直到之前找到的弹出失败的call
(12)按键盘上的减号键回退,寻找je大跳转或ja大跳(表现:je跳转指令直接跳到jmp指令的下条指令位置)
(13)为je指令添加 if else 注释,下断点,去掉函数头部断点,重新加载、运行
(14)爆破:对je指令右键,二进制,nop,单步运行弹出成功
(15)撤销修改
(16)修改标志位:je跳转关键在于zf标志位,修改zf标志位,单步运行弹出成功
(17)重新载入,按CTRL+G快捷键,输入MessageBoxA,按确认,汇编代码跳转到提示弹窗弹出位置
(18)运行弹出失败窗口,单步F8,一直运行到return,每次return后,回看上面代码查看是否是之前的失败和成功弹出关键call所在层,判断方法同样是找je大跳转或ja大跳转。
(19)找到后同理可进行爆破或修改标志位操作
(20)中文字符串搜索法:通过od插件进行搜索,猜测相应密码(插件->中文搜索->智能搜索)获得密码
(21)IDA搜索法:程序加载入IDA(视图->子视图->字符串)
IDA搜索失败发现没有,可能是不支持中文,在打开时添加参数-dCULTURE=all
(22)CTRL+F 搜索”注册失败“字符串,找到后双击进入字节码,找到该字符串开头(实际是结构体)
(23)按x键,弹出窗口,双击跳转到使用该字符串位置,获取该位置地址
(24)打开od,使用CTRL+G快捷键,输入0040117D,找到对应位置,下断点,F8运行到弹出失败
(25)从失败处回溯查找大跳转,通过爆破验证
3.保存破解后的程序
(1)选择nop处代码,右键复制到可执行文件->所有修改->全部复制,弹出框右键保存文件
评论