ichunqiu逆向刷题
1、小菜一碟:re100
下载后,不知道是什么文件,用Notepad先看下
发现关键字符:AndroidManifest.xml
改后缀名为apk,在模拟器中运行看看
猜测是输入flag后会有成功的弹窗之类的
放到Androidkiller里看看
反编译成功,查看一些关键性字符,找到”success”
查看java源码,分析
查看encode加密代码,是md5
所以将字符串”NzU2ZDJmYzg0ZDA3YTM1NmM4ZjY4ZjcxZmU3NmUxODk=”先base64解码,然后Md5解密,然后翻转一下,即可获得flag:jlflag{admin123}
2、Classical CrackMe
是一个exe文件,提示是注册码就是flag,打开运行
猜测会出现”注册成功”的弹窗
放入IDA中,寻找关键字,分析
即可找到对应的字符串,这个编码方式,用base64解码,即可得到flag
3、FindKey-.pyc
下载文件,不知道是什么文件,用notepad打开看,能看到有关键字,但是感觉也没有明显特征能说明是什么文件,开始各种猜测
猜了一会儿,后缀名改成.py后能运行了,但是无法直接分析这个.py文件,猜测是加密了
将后缀改成.pyc,使用easy python decompiler反编译,成功,得到一个findkey.pyc_dis文件
打开后可以看到正常的Python代码,Pwda,lookup和pwdb是三个数组,分析
编写一个脚本,思路:
一开始是想随机生成一个长度为17的字符串,然后把这个字符串用判定条件进行判定
但是后来觉得这样跑起来比较复杂费时并且存在一些问题
转换思路:将常用的字符列成数组,根据判定条件跑出每一个字符,最后组成字符串
1 | flag = '' |
成功跑出flag:PCTF{PyC_Cr4ck3r}
4、crackme-Python编写异或
下载文件,运行,发现有特殊字符”flag”
放到IDA里查看
发现能反编译的代码很少,怀疑加壳
查壳,加了ns的壳,搜索一下是北斗的壳,用脱壳机脱了即可
重新放到IDA中
看到重点代码,编写脚本即可跑出flag
编写脚本过程中的问题:
一开始是想使用上次一样的方法,遍历flag字符然后按照原代码进行异或操作,但是由于对异或运算不了解和Python编写不熟,一直跑不出
此题注意:
异或运算:a^b^a=b,a^b=b^a,a^a=0,a^0=a
Python编写异或,ord(),chr(),十六进制的数组方式
可以直接用两个数组异或得到flag
1 | byte_402130 = 'this_is_not_flag' |
跑出得到flag{59b8ed8f-af22-11e7-bb4a-3cf862d1ee75}
5、CrackMe01-postmessagew
查壳,无壳
放到IDA里查看,未搜到关键字,运行,发现有输入框,查看关键函数(如getwindowtext等
查找主要代码sub_402650(调用了sub_418B95
发现postmessagew函数,在这里可以查看各种函数的定义:https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-postmessagew
postmessagew有四个参数,动态跑一下看看四个参数分别代表什么
动态跑程序时,在getwindowtextw处下断点,然后F8单步运行,跳到Postmessagew时将鼠标放到对应参数上即可看到
lParam:输入字符的个数
wParam:输入的字符
查看句柄hWnd:
除了sub_402650调用以外,还有一个sub_402990函数
跟进去看看
查看调用的函数sub_4027F0
查看chText数组
注意:是两个字节一起
编写脚本:
final = 0x4B6
chText = [0x4F0, 0x4DA, 0x4D7, 0x4D1, 0x48C, 0x4FF, 0x4F5, 0x4FE, 0x4E3, 0x4F8, 0x4E7, 0x4FF, 0x4E3, 0x4E9,
0x4F0, 0x4F3, 0x425, 0x480, 0x484, 0x4F2, 0x4F4, 0x4F3]
for i in range(0, 22):
v6 = chr(chText[i] ^ final)
print(v6, end=’’)
得到flag:ICHUNQIU_FE362DBE
参考:https://blog.csdn.net/wangtiankuo/article/details/81201853
https://www.cnblogs.com/wanghj-dz/p/3973543.html
https://www.cnblogs.com/qq78292959/archive/2012/07/20/2600865.html
6、Smali-smali2java
下载了一个smali文件,根据搜索,可以将Smali文件转成Java,利用软件smali2java转为java文件
可以看到是一个base64+AES的解密过程
p1是加密的内容,p2是AES密钥
参考:https://www.cnblogs.com/caizhaokai/p/10944667.html
一开始直接解p1的base64,没解出来,然后p1p2都放到AES解密,也没解出来
就想要直接运行java程序跑的,发现有很多包的问题
然后解了一下p2的base64,出了明文
然后放到AES里解密
成功解出flag:PCTF{Sm4liRiver}
7、小菜两碟-PE文件头修复
一个无法正常打开的文件,用editor看一下,查找到关键字
尝试多种猜测后,应该是个exe,但是无法正常打开,怀疑PE头损坏
参考:https://www.cnblogs.com/2f28/p/9824366.html
https://bbs.pediy.com/thread-248817.htm
并打开一个正常的exe文件进行对比
发现两处错误,50450000是PE文件头,3C处是PE文件头地址(E9)
修改为如下情况:
修改之后可以正常放入IDA中分析了,无壳
根据关键字,找到主函数代码,反编译一下,分析
可以看到flag是由前三个数字加上’abc’组成的,即v20,21,22
编写脚本跑出前三个数字:
1 | for v20 in range(0, 100): |
然后一个个尝试即可