前几周搞 pwn 有点想吐,搞搞 re 吧

reverse1

1. PE文件分析

用的是 Exeinfo PE 这个软件,吾爱上有分享,爱盘也有收录。

这一步有点类似 pwn 查看程序的版本、保护情况:

64 位的程序。

2. 运行程序获取信息

题目最好在 命令行 中运行,避免运行结束前的提示字符没来得及看就关闭了。

3. x64dbg 打开

也可以用 OD 打开,因为OllyDbg 官方中文,我用这个入门吧。

用字符串定位程序关键位置,直接点面板的字符串,查找结果不全面的,需要在代码处右键选查找全部模块字符串:

然后操作逻辑就相当于 IDA 的了。

这里我是硬读汇编判断,将输入值与 {hell0_w0rld} 对比的,0x00007FF7F26F197E 明显调用 strcmp 用于比较。一开始以为是 {hello_world} ,发现还有一部分汇编将 o 换成 0

reverse2

1. 文件分析

64 位二进制文件

2. IDA 静态分析

flag 在程序中,最后结果需要进行替换处理,替换逻辑:将 i r 替换为 1

内涵软件

IDA 打开即可

helloworld

android killer 打开即可

xor

64 位程序;IDA 打开,里面大概逻辑是将输入的 33 字节数据进行一个加密,加密逻辑:当前字符密文等于前一个字符与当前字符的异或。

写一下脚本即可,这道题目重点是写到了 IDA 提取数据:shite+E

ida_chars =[0x66, 0x0A, 0x6B, 0x0C, 0x77, 0x26, 0x4F, 0x2E, 0x40, 0x11, 0x78, 0x0D, 0x5A, 0x3B, 0x55, 0x11, 0x70, 0x19, 0x46, 0x1F,0x76, 0x22, 0x4D, 0x23, 0x44, 0x0E, 0x67, 0x06, 0x68, 0x0F, 0x47, 0x32, 0x4F, 0x00]
flag = ida_chars
for i in list(range(0,33))[::-1]:
    flag[i]^=flag[i-1]
for i in flag:
    print(chr(i),end='')

reverse3

Exeinfo PE 查出来是 32 位程序,运行一下了解一下程序流程。OD 之类工具不太会用,用 IDA 静态分析一下。

主要加密流程都是在 main 函数里面了,具体看图都全部都注释了:

第一层加密根据中间用到一个字符串,推测出来应该是标准密码表的 base64 加密:

第二层加密就是每个字符加 下标 :

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author  : MrSkYe
# @Email   : [email protected]
# @File    : reverse3.py
import base64
ida_chars=[0x65, 0x33, 0x6E, 0x69, 0x66, 0x49, 0x48, 0x39, 0x62, 0x5F, 0x43, 0x40, 0x6E, 0x40, 0x64, 0x48]
flag = ''
for i in range(0,len(ida_chars)):
    ida_chars[i] -= i
print(ida_chars)

for i in ida_chars:
    flag += chr(i)

print("flag"+base64.b64decode(flag).decode('utf-8'))
Last modification:September 12th, 2020 at 04:43 pm