picoCTF
0x01 packer
elf的upx打包,我用windows的upx解不出来,开了个虚拟机在linux下就可以解包了,一开始就有flag串,十六进制转一下字符串就得到了。
picoCTF{U9X_UnP4ck1N6_B1n4Ri3S_1a5a3f39}
0x02 FactCheck
cpp程序,反编译出来很多很长,看了一下逻辑就是创建很多个字符变量,然后根据最后的逻辑按一定顺序的将这些字符append到半成品flag上,耐心看看就好了。
picoCTF{wELF_d0N3_mate_2394047a}
0x03 WinAntiDbg0x100
介绍说是一个反调试,点进去我感觉是这个阻碍我调试了,被调试时这个函数返回result=1,外部有个if接收了这个1后会导致程序退出,我们单步调试时在外部那个if前停下,然后修改ZF标志位,就能使程序跑向解密的二进制文件的代码了,直接查看内存里的密文就能得到flag。
picoCTF{d3bug_for_th3_Win_0x100_e70398c9}
0x04 Classic Crackme 0x100
elf程序用ida打开后是一串50个字符串的有与运算和位移运算的加密代码,总共加密三轮,每轮算出一个参数,我在脚本里命名为temp,是random2和secret3得出来的,然后每轮明文加这个temp再模26,我在脚本里直接写成加3倍temp模26,等价的。
代码里用0-25代替a-z,得先把密文转化成数字格式,最后再转化成字母格式。
1 | enc = "mpknnphjngbhgzydttvkahppevhkmpwgdzxsykkokriepfnrdm" |
开个kali虚拟机连接靶机,就能得到flag了。
picoCTF{s0lv3_angry_symb0ls_ddcc130f}
0x05 weirdSnake
这题打开是一个二进制文件,然后用010editor打开发现是python字节码,python字节码类似于在python的虚拟机里执行的代码,各种操作码的详情可以见中文官网
LOAD_CONST是入栈,然后STORE_NAME是把栈顶元素赋值给key_str,LOAD _NAME是把key_str入栈。分析下图的过程,尝试翻译成简单的过程。(这里的BINARY_ADD均指str重载的加法,即字符串拼接)
1 | key = "t_Jo3" |
0x06 WinAntiDbg0x200
和第一题dbg一样的做法,直接调试进去就好了。
picoCTF{0x200_debug_f0r_Win_c6db2768}
0x07 WinAntiDbg0x300
升级版,进入主程序,在开头处下个断点一步步调试,进如图下面的函数,f7进入,这个是判断你有没有用管理员启动该程序的函数,进去后通过改ZF标志位绕过检测。
接着往下调试,这里有个创建线程的函数,进去下个断点,f9跑进去。
进去后发现下面有个You got flag的字符串,直接跑进去!!!!!看看图形化界面就弹出了flag窗口。
picoCTF{Wind0ws_antid3bg_0x300_09b94ee8}