逆向学习笔记02

文章目录

    • 为什么OD找不到的字符串,IDA能找到?
      • 找不到是由于算法的缺陷
    • 让OD和IDA都搜索不到字符串的方法
    • 注释与标签
    • 按F8卡住,解决方法
    • 多线程代码(易语言线程特征)
    • 找到调用地方
    • 局部变量
    • 保存ida修改后的exe文件
    • XH补丁制作工具使用

为什么OD找不到的字符串,IDA能找到?

OD字符串搜索插件实现原理:
1.搜索进程模块的每一行汇编代码,寻找push、mov、lea指令
2.找到后,判断指令后面接的是不是字符串,判断的思路是:如果后面接的参数是以’\0’结束的,就说明是字符串,否则不是。

找不到是由于算法的缺陷

1.因为查找的某字符串可能是在结构体中,然而在字符串变量之前,可能存在其它的字符串变量,当遍历到前面字符串的结尾符时,就会停止搜索。而且当要搜索的字符串之前存在结尾符的话就会搜索不到。
2.ida搜索字符串的方法
ida是直接搜索PE文件中所有的字符串信息,因此能搜索到。

让OD和IDA都搜索不到字符串的方法

在 VS中,把字符串定义为局部变量,定义为全局变量,可以搜索到,如下定义字符串就不会搜索到:
char str[]={0xD7,0xA2,0xB2,0xE1,0xCA,0xA7,0xB0,0xDC,0x00};

注释与标签

1.注释是在汇编窗口中显示的,标签是在内存窗口中显示的
2.call+addr,在OD中跳转到addr,在addr处添加标签后函数名会更改,内存窗口中的地址右边会有函数名,

按F8卡住,解决方法

1.点击线程窗口,回复所有线程

多线程代码(易语言线程特征)

00403E04 . 56 push esi ; CM.00403DF8
00403E05 . 57 push edi ; CM.00403DF8
00403E06 . 53 push ebx
00403E07 . E8 ADDAFFFF call CM.004018B9
00403E0C . 5B pop ebx
00403E0D . 5F pop edi ; CM.00403DF8
00403E0E . 5E pop esi ; CM.00403DF8

找到调用地方

1.运行到函数头部,右键选中第一行代码,右键find ref-》selected command
2.选中栈顶的函数地址,点击enter

局部变量

1.[local.1]函数的局部变量1
2.[local.2]函数的局部变量2

保存ida修改后的exe文件

意义是:当遇到有混淆的代码时,有时需要在ida中进行修改,修改后OD就方便调式。
弊端:修改后无法撤回,而OD可以
注意:修改的时候要注意,修改的字节数要跟修改前的字节数相同,不然会报错。
操作:Edit->Patch program->assemble->在instruction中输入修改后的内容,接着edit->Patch program->Apply patch to input files

XH补丁制作工具使用

1.在内存地址处输入要修改的地址
2.在修改指令处输入要修改的指令,点击添加-》生成补丁
3.打开打了补丁后的程序和要破解的程序
4.关掉所有杀毒软件,运行打了补丁后的程序,点击破解即可

逆向学习笔记02_第1张图片

你可能感兴趣的:(信息安全,逆向)