Polarctf -- Re(1)

Polarctf之简单逆向

1. shell

复制代码
用exeinfope查看下程序结构, 发现存在upx壳
复制代码
用upx工具脱壳, upx.exe -d shell.exe
复制代码
再使用IDAPro打开
复制代码
#flag{crack_is_funny}

2. PE结构

复制代码
将程序拖到010里, 修改为PE文件头:4D 5A 90 00
复制代码
检测是否带壳
复制代码
打开IDAPro进行分析


exp

复制代码
a = "eobdx55:;4bgg30`:;b;e3`b`42f7`be`1b5b~"
flag = ""

for i in range(0, len(a)):
	flag += chr(ord(a[i]) ^ 3)
print(flag)
#flag{66987add03c98a8f0cac71e4cafc2a6a}

3. 拼接

复制代码
拖入到010中, 发现504b0304, 是个压缩包
复制代码
添加后缀.zip, 得到拼接.exe, 拖入工具看看有没有加壳
复制代码
没加壳, 拖入到IDAPro中分析
复制代码
#flag{03ff6cf238c5cd8e7b4ee1e9567ad5a4}

4. 加加减减

复制代码
拖入到010发现是PK头, 说明是一个压缩包
复制代码
修改后缀名.zip, 发现加加减减.exe, 拖入工具看看是否有壳
复制代码
发现没有加壳, 拖入到IDAPro进行分析


exp

复制代码
a = "ek`fz5123086/ce7ac7/`4a81`6/87b`b28a5|"
flag = ""

for i in range(0, len(a)):
	flag += chr(ord(a[i]) + 1)

print(flag)
#flag{62341970df8bd80a5b92a7098cac39b6}

5. 康师傅

复制代码
还是一个压缩包, 解压得到一个1.exe, 查看是否有壳
复制代码
没有加壳, 拖入IDAPro进行分析


exp

复制代码
a = "oehnr8>?;<?:9k>09;hj00o>:<o?8lh;8h9l;t"
flag = ""

for i in range(0, len(a)):
	flag += chr(ord(a[i]) ^ 9)

print(flag)
#flag{17625630b7902ac99f735f61ea21a0e2}

6. 另辟蹊径

复制代码
运行程序, 这是一道改值题
复制代码
使用工具cheatengine, 打开cheatengine --> 打开进程 --> 修改数值为100000 --> 扫描


复制代码
修改值为1, 再次点击图标


复制代码
#flag{60983973c2ab87436914d71000e4b4e4}

7. use_jadx_open_it

复制代码
此题考察使用jadx反编译工具, 将下载好的文件拖入到jadx中
复制代码
搜索main函数
复制代码
打开MainActivity, 就能看到flag
复制代码
#flag{go_to_study_android}

8. re2

复制代码
将文件拖入到010中, 发现是一个ELF文件, 查看下其位数


复制代码
是64位程序, 使用IDA64打开, 定位到main函数, 发现flag
复制代码
#flag{e10adc3949ba59abbe56e057f20f883e}

9. layout

复制代码
是一个apk文件, 使用jadx打开, 搜索main, 定位到MainActivity, 发现flag


复制代码
试着提交这个flag, 发现是个错误的flag
复制代码
直接搜素flag{
复制代码
#flag{andoird_re}

10. Why32

复制代码
查看程序是否有壳
复制代码
将程序拖入到IDA64中进行分析, 发现加密过程


exp

复制代码
a = "2gfe8c8c4cde574f7:c6c;:;3;7;2gf:"
flag = ""

for i in range(len(a)):
    flag += chr(ord(a[i]) - 2)
print(flag)
#0edc6a6a2abc352d58a4a98919590ed8

明显的md5,使用cmd5网站得到最后结果
复制代码
#flag{F1laig}

11. ?64

复制代码
直接运行该程序
复制代码
base64解码
复制代码
将结果进行md5加密
复制代码
#flag{5d15777a411724ee5d029caca1ca7298}

12. Sign Up

复制代码
查看字符串, 双击数字, 找到加密前的账号和密码
复制代码
查看Check_Data函数, 发现我们需要对账号前7位-1, 密码前四位-2即可


exp

复制代码
a = "192168109"
b = "root"
res = ""
for i in range(7):
    t = int(a[i]) - 1
    res += str(t)
res += a[7:]
for j in range(4):
    t = chr(ord(b[j]) - 2)
    res += t
print(res)
#081057009pmmr
复制代码
#flag{aa07caa2ff9e5b774bfca3b1f20c3ea0}