Reverse培训

IDA

1.基本使用

使用压缩包里面的IDA(32位)(80386)portable ex。。代表PE格式,IDA64是64 (amd64)

plz conf (NO)

2.界面分析

img

此时说明已经分析完了 在跳动表示还在分析。

image-20210905200419891

IDA自动分析出代码中的函数。

最主要

生成伪代码

和反编译对应 变绿说明IDA识别成了一条指令 变黄是同样的

c语言中的

两个表:用到的外部的函数 导出我想给别人用的函数。exe只导出了start

output window函数输出

在python执行python语句

graph ov对函数进行大致的查看

img

Fw sub..表示去掉了函数名的函数(PPT)

强调在内存中的地址

关于段(PPT)内存中希望代码是对齐的 (因为最初的加载就是在4开头的内存中加载)

这个文件帮助

ctrl+f打开搜索

IDA VIew:

绿线代表他的条件成立 红线代表不成立 点击空格就可以将图片视图转化成文字视图

label 有跳转 就会标志

注释:绿色 点击分号就可以加注释:

rename可以重命名 函数的名字。对标签也可以重命名。

img

取消定义:

一会可能会花指令 是将IDA识别错误的代码转化成数据

img

Direct:指哪个方向调用了他 Addr在某个函数基础上做了偏移。

注释的箭头 上面的函数调用了他

X86这个特殊的CPU里面 数据和代码是不做区分的。

shift f12 收集了很多字符串 然后搜索plz 定位到这个字符串 然后交叉引用 再切换到IDA View界面。先将后面的点亮成黄色然后再点击x xref

题目

1.easyalgo

步骤:

1.现在函数窗口Ctrl+f查找main 发现还是没有给函数名

2.然后再打开exe 发现还是Plz那句话 那就shift f12打开string窗口找到后然后再点击选中字符串ctrlx打开交叉引用 选到该函数

3.生成伪代码 点击f5 反编译的窗口 不是黄色感叹号的就都点ok

4.(unsigned int)像这样的强制类型转换点击hide cast来进行隐藏。

5.对一些看的出来的函数 进行一下重命名。

img

6.进行重命名后:

img

7.发现一个异或操作:性质:a异或b=c c异或b=a 一个数异或两个不一样的数 最后的结果一定等于最后的数?

8.

img

通过观察我们可以看出输入与0x32u异或

9.

img

把几个字节作比较

10.

img

11.

img

在这里IDA错认为unk-4A。。。是一个代码点击U(2.9.4) 要使前面的text变蓝然后再点击U。

shift+E 数组第四个 然后复制到记事本里 然后用python err={} flag=‘’ for i in arr flag+=chr(i异或0x32)

(2.32)

(2.46.37)

然后再点击c makecode 然后发现不能反编译了,摁tab会变成这样,正常函数的字体是黑色的 但是现在重新变成代码的地方地址是红色的,摁一下键盘上的p,摁一下p 就变成函数了

img

make data的意思是 想把数据改成dword 点击d 从unk-》byte-》word(dw)-》dword()

ppt31 IDC是IDA内部内置的类似C的语言 解释执行 不用编译。左边是编辑器

自动化逆向分析 复制一个一个数字 可能人手要复制10次 但是可以用python语言来对数据进行一个处理。

红框 中间是汇编助记符,mnem 最前面的是地址 addr 第三个是opcode (operand操作码)对这三列进行分开的操作

IDApython常用的函数

img(6EE@$@WW1YB$SPFD2T.png)

(6.57)

1.先再string界面找到Please 然后利用交叉引用找到函数 再反编译。

2.文件太大了(too big function)看到这个函数的地址是401190 下一个函数的地址是 434230 中间隔了三万多的地址 因此

反编译很慢 因此就

3.这种题有特点 (爆破特点 只改动一位 按顺序的最后一位 前面这些都不变才能用爆破,所以这个题不可以使用爆破。)

4。因此用自动化的方式来做这道题 写脚本。

5.我们先根据突破点 找exe文件的输出 例如you dont find it (找到下一个函数 然后往上一走,)发现这里没有进行混淆流程非常清晰。然后看ppt35.这里就是需要分析汇编代码。

6.20h是证明这个循环需要循环0x这么多次??

7.通过观察IDA View中的汇编指令

img

发现这里的 应该为input 下面那个粉色的是cin

8.

img

2是eax×6然后放在ecx里面。

然后刚才的结果作为数组的索引,然后再把数组中的元素取出来放在edx和eax里面 然后内容相加,然后放在数组下标为6的这个位置。

下一组也是 关键操作时sub

9.多少种指令怎么来确定

就是excute script(21.51)

10.在output windows上clear一下


Author: John Doe
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source John Doe !
  TOC