一些知识
直接写吧
-函数!strcmp()返回值才为1
-逆向分析倒着来,flag往往是通过一系列加密等方式得来,从后向前分析可以防止头脑爆炸ಠ_ರೃ。一定要注意加密解密之间的关系,不要加密再加密>ᯅ<
-memcpy()函数用于:复制内存块
C连续定义变量分配
- 基本类型变量:int(4字节)、char(1字节)、double(8字节)、float(4字节)连续定义变量分配后,先定义的变量在高位,后定义的变量在低位。
1 |
|
- 数组:a[0]地址比a[1]地址低,与基本类型相反
先定义的数组地址比后定义的数组地址高
1 |
|
修改一下
1 |
|
可见,连续定义数组的内存分配是连续的,且先定义的数组地址比后定义的数组地址高。
工具
jd-gui:Java 反编译工具
jadx-gui:Android反编译gui工具
upx: 脱壳工具使用方法
- 1.打开upx脱壳工具
upx.exe(upx应用层程序名) -h
-2.一大串字符…(⊙_⊙;)…
-3.输入脱壳指令
upx-d (文件位置) -tips:要加入后缀名
exeinfo PE:程序检查器 (ida未动,exeinfo PE先行)
手动脱壳(OD)
1 | 关键汇编指令(pushad,popad) |
最后一步:鼠标右键——>用OllyDump脱壳调试进程——>脱壳
x64/x32 dbg (快捷键)
F8 单步步过 F4跳到光标处 F9运行到断点处
脱壳三步法
不管是哪种脱壳方法,都需要遵循脱壳三步法,脱壳三步法分为以下三步:
① 寻找原始OEP
这一步骤的主要作用就是要确定原始程序代码到底在哪里,能找到原始程序的代码,说明壳代码执行完了,我们只有找到原始OEP才能进行下一步的动作。
② dump内存到文件
当我们找到原始OEP,调试运行到原始OEP时,只要代码被还原,我们就可以在这个地方进行dump内存,将内存中被还原的代码和数据抓取下来,重新保存成一个文件,这样脱完壳时,我们就可以用静态分析工具分析程序了。
③ 修复文件
这一步主要就是修复IAT,对从内存中转储到本地的文件进行修复。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Randolfluo's blog!