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}