whaleCTF RE方向部分writeup
0x00 PE格式
用PEtools打开,通过查找
块数目 0x0004
时间戳 0x591D5CCC
入口地址 0x0005B789
信息标识 0x0103
得出flag:BJWXB_CTF{0004h-591D5CCCh-0005B789h-0103h}
0x01 WarmUp
经过一系列操作,进入compare函数,然后进入分支语句。
回头看,若v17和上图中高亮部分相等,则进入congratulations语句,否则try again
可见是一个简单的异或操作,写一个脚本(devc++)
得到flag:BJWXB_CTF{W4rm_UP_warm_up_WARM_UP!}
(不过这中间出了一个小插曲,最后的WARM_UP中的R没有显示出来,猜测应该是被转义了,查了一下资料:
因为C/C++/C#都有转义符这个东西,所以字符串中的反斜杠“\”会被识别成别的东西,不能完整的打印。 比如:string id = USB\VID_";。使用cout << id << endl打印可能就是“USBVID_”。 为了完整打印,可以利用无视转义符操作。 C++:string id = R"(USB\VID_)";。添加R。 C#:string id = @"USB\VID_";。添加@。
————————————————
版权声明:本文为CSDN博主「xiduo1994」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiduo1994/article/details/80890025
但是在devc++上这样写会报错,没什么用,所以莫不如直接在反斜杠前再加一个反斜杠就好了......
)
0x02 app-release
拿到一个apk文件,首先就对apk文件进行反编译,这里的一系列操作就不说了,可以上网查看,然后丢到jd-gui里反编成Java代码,找到main主函数,发现也是异或,和上一题差不多
找到a.class文件,看完就大致明白了,和0x01题一个思路
然后就改一下上一题的脚本就好了,方便的很,运行出结果,得到flag:BJWXB_CTF{Andr01d_VerY_S!Mple!}
此题难点就在于apk的反编译,多做几个这种题熟悉熟悉,apk是一个安卓上运行的文件,你可以发到自己手机上验证一下,本人闲的无聊,在电脑上下载了一个手机模拟器,蛮好玩的,直接在电脑上就可以跑了。
0x03 r100( defcamp )
找到核心位置代码:
蛮有意思的,二维数组这里有点没太看懂,&v3就是v3的长度7,然后最后的脚本是这样写的,可以参考一下:
因为要求的是s,也就是a1,所以直接输出就可以了,得到flag:Code_Talkers
搜了一下其他大佬的博客,这个说的很好,转载自原文链接:https://blog.csdn.net/xiangshangbashaonian/article/details/82860388
0x04 逆向练习
进入主函数:
高亮这里还挺有趣的,v9的内存地址和v10,v11....连在一起,所以就是这个字符串的第v9/v10/v11...依此类推个数了,v33-v37在v32后面,所以可以认为他们是一起的,然后在加上1024},下图写个简单的脚本(c++):
得到flag:KEY{e2s6ry3r5s8f61024}