CTF-WP-5
强网拟态fisher逻辑有异常,所有的逻辑基本都在catch那里。
处理输入的逻辑都在图中断点call的函数中。
这个函数具体可以分为三段:
第一段感觉就是把输入从一个地方换到另一个地方
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455if ( *(_DWORD *)(a1 + 56) ){ v6 = 0i64; v7 = (_QWORD *)(a1 + 40); v8 = *(_DWORD *)(a1 + 56); do { v9 = v7; v10 = v7[3]; if ( v10 >= 0x10 ) v9 = (_QWORD *)*v7; if ( *((_BYTE *)v9 + v6) == 10 ) break; v11 = v7; if ( v10 >= 0x10 ) v11 = (_QWORD *)*v7; ...
CTF-WP-4
TPCTF2023nanPyEncpyinstxtractor.py可以轻松解压。
注意:猜测是不同python版本的原因导致不会解压PYZ archive
python3.10下:
python3.8下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445# Source Generated with Decompyle++# File: run.pyc (Python 3.8)from secret import key, encfrom Crypto.Cipher import AESfrom Crypto.Util.number import *from Crypto.Util.Padding import padkey = key.encode()message = input('Enter your message: ').strip()if not message.startswith('TPCTF{') ...
CTF-WP-3
N1CTF2023AdditionPlus程序获取输入,然后八个字节八个字节的加密。
八个字节的加密方式是分别经过八个函数,每个函数得到一个字节的运算结果,然后进行比对。
每个函数有一堆运算由与、异或、左移1位组成。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758__int64 __fastcall main(int a1, char **a2, char **a3){ __int64 v3; // r15 __int64 v4; // rax __int64 v5; // r12 int *v6; // r14 char v7; // cl char v8; // al __int64 v9; // rax __int64 v10; // rdx _BOOL8 v11; // rdi int *v13; // [rsp+8h] [rbp-F0h] ...
无题
fmt12345678910111213141516171819202122232425262728293031323334__int64 __fastcall read_mess(__int64 a1, int a2){ unsigned int i; // [rsp+18h] [rbp-8h] int v4; // [rsp+1Ch] [rbp-4h] for ( i = 0; (int)i <= a2; ++i ) { v4 = read(0, (void *)((int)i + a1), 1uLL); if ( v4 < 0 ) { perror("read"); exit(-1); } if ( !v4 ) break; if ( *(_BYTE *)((int)i + a1) == 10 ) { ...
CTF-WP-2
四川省赛2023big numbermain_main主逻辑只是获取输入,并调用main.encyrpt,最后进行比较:
main.encryptmain.encrypt逻辑:
两个大数相乘115792089237316195423570985008687907853269984665640564039457584007913129640233和463168356949264781694283940034751631413079938662562256157830336031652518559817,然后将输入由二进制数据转化为大数,并进行指数为131101,模为两个大数的乘积的运算,即一个RSA加密。
这其中的大数的结构大概这样子:
这里将输入转化为大数,然后将输入作为底,num_131101作为幂,大数乘积作为模,进行运算,结果放在rax上。
然后调用main_encrypt2。
main_encrypt2这个函数其实就是一个换表的base58。
表为:rUzoi1mGW6u8TFH3RCbeKYZSJ2DsAXwgfhdQj5cvLNMaxV97kq4ynEBPpt
将输入的 ...
CTF-WP-1
巅峰极客2023wp1:巅峰极客 2023 逆向 Writeup - s11nk - 博客园 (cnblogs.com)
g0Re还原特征码
即可upx脱壳。
程序逻辑首先是一个AES加密,调试可以得出加密函数:
然后一个换表了的base64:
最后与key异或,然后比较:
exp123456789101112131415161718192021222324252627import base64import structfrom Crypto.Cipher import AESkey = [ 0x77, 0x76, 0x67, 0x69, 0x74, 0x62, 0x79, 0x67, 0x77, 0x62, 0x6B, 0x32, 0x62, 0x34, 0x36, 0x64]uni_base64 = '456789}#IJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123ABCDEFGH'std_base64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcde ...
电子取证
volatity2volatity2 为 python2使用的,其所需的库也要用python2的pip下载。
用法123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149Volatility Foundation Volatility Framework 2.6用法: Volatility - 内存取证分析平台 Options: -h, --help ...
羊城杯2023
Blast一些简单的混淆的指令可以patch掉:
12345678910111213from idc_bc695 import *def patch(start, end): i = start while i < end: if GetMnem(i) == 'jnz' and GetMnem(i + 6) == 'jmp' and GetOpnd(i + 0xb, 0) == '$+5' and GetMnem(i + 0xb) == 'jmp': print(hex(i)) for j in range(i, i + 0x10): PatchByte(j, 0x90) i += 0xf i += 1for seg in Segments(): if SegName(seg) == '.text': patch(seg, 0x40B7E4)
调试可以发现,这里是单个字符的双重md5:
将md5值十六进制表示:
这里进行结果比较:
也就是说结果 ...
PYC文件解析
PyCodeObject123456789101112131415161718192021222324252627typedef struct { PyObject_HEAD /* 头部信息, 我们看到真的一切皆对象, 字节码也是个对象 */ int co_argcount; /* 可以通过位置参数传递的参数个数 */ int co_posonlyargcount; /* 只能通过位置参数传递的参数个数, Python3.8新增 */ int co_kwonlyargcount; /* 只能通过关键字参数传递的参数个数 */ int co_nlocals; /* 代码块中局部变量的个数,也包括参数 */ int co_stacksize; /* 执行该段代码块需要的栈空间 */ int co_flags; /* 参数类型标识 */ int co_firstlineno; /* 代码块在对应文件的行 ...
陕西省赛2023
BadCoffeejs混淆逆向
反混淆后的代码:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118function table() { var _0x293934 = ['8QWULJr', '414933buASiW', 'log', 'uuIPk', '2hWBkZw', '50830UgfzNJ', 'search', 'toString', ...