Day4-逆向痛苦的一天

  hkwany       2017-08-04 17:58:48 1540  4

只需右键,一步搞定各种反编译,签名,优化

边信道攻击

-CTF中可以使用pintools

原理:监测程序执行指令数

应用:逐字节验证的题目

Google大法好

-双引号搜索S-box等常量快速确定算法

trick

-快速找main位置

          找大挑战

-快速定位关键位置

          FunctionList靠前的位置开始翻

          main函数旁边翻

          编译时不同的源文件会被分别编译为.o再由编译器合并

          编译命令行中标准库一般在最后面

应对MFC程序

          使用xspy工具查看消息处理函数(在demo里有)点那个放大镜,然后选MFC窗口里面的各种布局单元,查看输出信息的最下面OnClick OnCommand

手动加载signature

          IDA打开MFC程序,shift+F5,发现没有加载mfc库,右键”Apply new signature”

          MFC库——vc32mfc

          C运行库——vc32rtf


调试技巧

如何得知MessageBox后程序在哪里继续运行

ODx64dbg中找到内存布局列表7

有时候F5会看到

JUMPOUT(__CS__,%loc_XXX + 4 * dword_XXX(idx))

典型的跳转表出错,是由于位置无关代码(PIC/PIE)无需动态分析位置即可直接运行,直接target=base +/- (table[value]<<shift_amount) 

target=loc_XXX + (dword_XXX[idx]<<2)

Edit-Other-Specify Switch Idiom(help可以查看跳转表相关内容)

恢复跳转表会出现在switch语句中

 

IDAPython,查看IDA内部数据结构和实现

 

HexRay出错处理

常见F5出错信息(推荐书籍:加密与解密)

-positive sp value(开启堆栈指针打开 option-general-勾选stack pointer)

-call analysis failed(F5在分析调用时,未能成功解析参数位置/参数个数)

-cannot convert to microcode(部分指令无法被反编译)

-stack frame is too big(在分析栈帧时,IDA出现异常,导致分析出错)

-local variable allocation failed(分析函数是,有部分变量对应的区域发生重叠,多见于ARM平台出现Point Rect等字节容易出现)

-分析结果不正确(F5会自动删除不会达到的代码)

 

F5高级使用

1.      自定义寄存器传参

2.      HexRays源码级调试

 

编写IDA Processor


ida-processor-template.py 用来标记是什么指令操作,引用了哪些变量和交叉引用,通过设定feature来标记是什么样子的指令像RETNfeature就有stop表示该函数段已经终止,EIP交给命令行原来下一行指令

夏令营文件夹里的ida-proc.py


 

IDA加载头文件

IDA打开libcook.so,然后ctrl+F9导入头文件jni.h,在JNI_OnLoad函数,将第一个参数JavaVM *改成JavaVM_ *,重命名了自己的变量,不和其他地方冲突,然后反斜杠\简洁代码,在vm->functions->GetEnv里的第二个参数,改成&env

_BYTE *sub_680(int a1,int a2)改成_BYTE *sub_680(int len, ...) …表示可变参数

 

恢复符号

1.      找程序的旧版本(寻找旧版本上的漏洞,查看如何patch的)

2.      Rizzo匹配

3.      看程序自带的string

4.      Google搜索源代码

5.      自己制作signature

请先登录
+1 已点过赞
4
分享到:
登录后才能发贴或参与互动哦! 点击登录

全部评论 (0)