逆向疑问解集
1,为什么OD不能搜到字符串,而IDA能搜到?(干死只会搜字符串的小白)
OD搜索字符串功能的实现是一个插件(本身不具备),我用的吾爱破解的大佬写的。
大佬的插件功能是findascll函数中,它会取得反汇编中内存的模块的地址。
判断push,lea,mov;
例如找到push了,push ebp
它会判断ebp里面是不是字符串。而判断字符串的标准是是否以\0结束,是的话则是字符串。
如果是个结构体,里面有字符串则无法读取,例如01 00 00 00 d7 a2 b2 e1 ca a7 b2 dc 01 00;
它读取01 00后则判断结束,后面识别不了。
而IDA是静态反汇编,用pe文件方式,可以看
提问:能不能既让OD搜不到也让IDA也搜不到呢?
比如说字符串隐藏。
int main()
{
char s[]={0xd7,0xa2,0xb2,0xe1,0xca,0xa7 };
puts(s);
}
我们用puts(s),还是可以说看到中文提示的;
但OD和IDA都搜不到。
为什么??? 我们定位到,是十六进制,汇编则反映不出(当成代码了)以字节显示,但如果是全局变量就不行。
为什么全局变量使用字符串隐藏可以查到?
编译器会把全局变量和局部变量放在不同的位置,全局在全局区,局部在栈区。
OD中immlabe的插件是干嘛的?
调用标签,OD自带功能。有点注释的意思
如果OD我们单步步入(f8)卡住怎么办?
我们选择T恢复线程即可。
关于注册码的小白级破解问题
我们考虑使用线程进行混淆提高安全
易语言会有如下特征
在OD中
push esi
push edi
push ebx
call xxx
pop ebx
pop edi
pop esi
retn
方法
我们查找哪个地方启动的线程,鼠标右键,查找参考,查看命令。我们找不是红色的就行。进去直接
把条件nop掉
OD中[local.1],[local.2]是啥
它在c中是局部变量
我用OD修改后提示在可执行文件中无法定位到数据
软件被加上了壳,无法保存。
比如说加个最简单的壳
你不运行全是地址全是0000。只有你运行起来才出现代码。
你需要在运行后修改,不然就凉了。
我们常如下面的方法破解
xh补丁制作工具
原理:调试API
主要是writeprocessmemony;
功能强大
pyg内存官方补丁
pyg—dll劫持补丁
提问,为啥生成的dll放在同一文件夹下可以破解成功?
程序加载dll,优先加载同目录下的dll(就近加载dll),成功就不会在系统中去加
我们通常称dll劫持。
实现dll劫持补丁,万一调用到真正的DLL函数功能怎么办?
我们的dll,中间做了我们的想做的事,然后给真正的dll去做。
IDA如何修改汇编指令?
IDA的插件patch program也可以实现与OD一样修改的功能
有壳软件怎么写劫持补丁?
要壳把真实的代码之后进行修改。我们做辅助用dll注入过检测。