re1re1.rar
扔进Exeinfo PE,64位ELF文件,无壳
ida分析找到主函数,sub_950函数应该是进行了某种加密,然后再和v9比较
进入sub_950函数,网上查了一轮发现是进行了base58编码
python base58解码即出flag
1 | import base58 |
re2re2.rar
扔进Exeinfo PE,32位exe,Aspack壳
尝试用网上的脱壳机不行决定手动脱壳,用od打开
跟着网上的ESP定律脱壳视频学,F8一下再右键ESP寄存器选择 HW_break[ESP],然后再F9,取消断点
再F8几下进入壳内的exe函数,然后就找到了程序真正的OEP
选择 插件->OllyDump,自动选择了当前EIP作为OEP,啥都不用选直接按脱壳,保存为dump.exe
用IDA进行分析,题目给了提示说要动调(实际上直接静态看也能看出来)
双击进入验证函数再双击进入unk_403020,shift+E提取数据
进入加密函数sub_4026A0,直接分析if判断或者动调一下就知道只会执行else语句
a1为0x12345678和flag的异或,所以a1%a2=a1。写脚本即出flag
1 |
|
re4re4.rar
这题让我好好学了一下pyc的逆向还有pyc的字节码混淆
参考:通过字节码混淆来保护Python代码
python逆向学习-pyc文件的反混淆(python2)
这题和第二篇文章一样(图片并非题目文件)
找到pyc文件中的两个 71 03 00 71 00 06 64 FF 并删掉,然后将第一个73后面的32改为22,因为删掉了16个字节。
用uncompyle6 转为python源码,得到下面的代码(有修改),爆破得到flag
1 | print('plz input flag:') |
REgameREgame.zip
扔进Exeinfo PE,64位ELF文件,无壳,中间有加花,去花后F5得到下面的伪代码
进入验证函数sub_40092D,这里删除了真正的答案,因为限制了答案需要nc得到
再进入sub_400967函数,发现将每两个输入将字串对应转成数值,然后10v8+v9是把两个数转为两位数,且下一次输入的个位十位对应和上一次输入的必须至少有一个相同
其中byte_602180长这样(我转换了一下)
scanf(sub_400967)和到sub_4008D6函数中间的代码做了一些操作,但实际上就是把含有scanf函数的return转为字串放进 转换函数里
转换函数将”CFUMT”字符串的一些组合作为”abcdefghijklmnopqrstuvwxyz!.?“的索引
总的流程就是(看下面的脚本)
输入key1索引-> 转换为”CFUMT”的组合->转换为”abcdefghijklmnopqrstuvwxyz!.?*”的索引->验证最后的字串为”johnnysilverhand”->成功
实际上可以完全写脚本解出来,我最后选择手搓
1 | import re |
输入input进题目的nc里,即可得flag