ReW_p
经典exe
:
v18是我们输入的;v5是那一串带点的;v0是我们输入的字符串长度;
看函数sub_4116c7:
每三个一组,取前六位、取后两位、取前两位,和0x30、f、3f进行与操作。这么熟悉的操作,想起了base64加密。再看看加密字符串:
能够确定,是base64加密
然后往下看
v1是加密后字符串的长度;
然后进入函数sub_411389:
依旧是加密,只不过表的最后两位给换了。
往下看函数sub_411023:
就是给加密后的字符串加点,加到第一位:a2的第一位是点,然后a2的第二位是a1的第一位,然后依次换位。
接下来的函数也是加点,只不过加到了第22位上
接下来的函数运用的是爆破思想:
个人理解:首先是可见字符串的ASCII码值,x代表ASCII码值,a代表数组1,b代表数组2,c代表数组3
如果a的第一位的x对应b的第一位,那么就让c的第一位赋值为x
脚本:
1 | int main() |
解出来的字符串去点然后进行两次的base64解密即可
经典base
查看伪代码,我们发现有一个base58加密(Base58 采用数字、大写字母、小写字母,去除歧义字符 0(零)、O(大写字母 O)、I(大写字母i)、l(小写字母L),总计58个字符作为编码的字母表也就是:123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz)
那我们直接用icyberchef:
从base58转换为字符串
经典re1
用x64dbg打开之后,运行,然后右键>搜索>当前区域>字符串,然后ctrl+f搜索flag找到
经典re2
用ida打开
首先我们输入v7,然后将v7的值赋给v10,然后进入while循环,过程是把v7的值每一个都与7异或,然后退出循环,如果v8和那个unk函数里的值一样就是yes
那么我们要做的就是找到unk函数里的值,然后再每个值异或7即可
然后进入unk函数
发现什么都没有,这需要动态调试了,unk的值应该是程序运行到某个地方然后才会跑出来值
关于ida的动调:首先找一个合适的调试器
然后文件目录下找到dbgsrv
我们用的是64位的
把端口、ip填进去
开始调试
找到这一串字符串,发现是他们进入到unk函数里
在ida里面,进入unk函数
可以发现mov了很多值进入函数里,我们用f5查看代码
但不造我为啥后面没有字符串。。。。。
然后写一个简简单单的脚本得到flag
squid
放到linux里面运行
拉入ida,shift+f12查看字符串,发现有很多py开头的
意味着是一个python文件被打包成了exe文件
用pyinstxtractor.py文件
通过readme.txt获得使用方法
成功解包
捣鼓了半天,根据cmd里面的提示发现,说是要用python3.6去解包,于是我把python版本改为3.6,然后解包,PYZ-00.pyz_extracted文件夹里才有东西了。
之后把struct里面的文件头给pyc补充上,然后放到在线python反编译得到
打开PCcharm运行得到
cheems
先查壳
ida里面也找不到字符串和函数
然后可以看到是upx
但放到010发现是cpx,怪了,手动改改
可以了
然后ida找字符串