逆向学习笔记1
Acid burn
1.Acid burn
查壳发现是32位系统编译的
使用ida32位的打开此文件,点击ok
破解目标,去掉软件启动时的这个弹窗
尝试查找main函数,发现没有main,因为它的语言是delphi哈哈
依次选择这三个选项,查找字符串
发现这行kill所在的位置
双击这一行,然后在箭头所指处按x,查看哪里用到了它。
点击ok,跳转到这样一个界面
按一下或者两下空格,来到这里
push 0 是这个功能的开头,鼠标放在push 0 这一行,右键单击,选择这个assemble
发现push对应的指令是6a,而return对应的指令是c3
我们处理的思路,就是将这个6A这个地址直接改成C3,开头直接return
还是在这一行,右键,patching,changebytes
然后这样操作
可以观察一下函数发生的变化
再次右键,patching,apply patchs to
然后
会出现这么一个问题,看下面的解决办法
在任务管理器这边,结束掉就行,
重新执行伤处apply patchs操作,重新打开程序就行了
2.serial number逆向
想办法让这个check it baby,过掉这个incorect
通过shift+f12定位关键字符串
查看伪代码
按空格切换视图
发现jnz后面有2种可能,先下断点吧,观察zf寄存器中的值,此时zf=0
此时如果我将zf改成0x01,那么程序就会跳转到正确的逻辑中,但这个操作和set ip是一样的。仅仅能临时修改这一次,需要真正的修改,还是需要改掉源代码,才可以
这里涉及到一个知识点,jz和jnz。这里我们直接改jnz成jz即可。这两个函数的判断方式是相反的。所以,当jz 或者 jnz 默认跳转到a结果,而我们想要的是b结果时,我们就能直接给他改成另一个函数,就达到了实现目标。
右键,asemmble
改成如下图所示,然后按一下回车
会变成这样
再保存一下
点击apply patches即可。成功
3.序列号逆向
目标就是过掉try again
第一步还是先定位字符串
双击进去,ctrl+x交叉引用定位到这里,按空格,tab切换视图
选中这一行,f2按下断点,然后点击上方绿色小箭头运行程序
会发现这条箭头一直闪缩,代表程序要往这里跳转。跟进我们上一节学到的,jn和jnz的相反性。直接改函数就行
右箭asemmble改成jz,按一下回车
结束程序运行,右键打上 apply patch即可破解此程序