NCTF2021_RE_WP
NCTF2021_RE_WPHello せかい记事本都能做的题.IDA打开直接看到flag
flag为 NCTF{We1come_2_Reverse_Engineering}
Shadowbringerbase64换了2次表,调试起来找到表,逆回去即可
写脚本解密
1234567891011121314import base64flag = "U>F2UsQXN`5sXMELT=:7M_2<X]^1ThaWF0=KM?9IUhAsTM5:T==_Ns&<Vhb!"std_table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'my_table = '#$%&\x27()*+,-.s0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[h]^_`ab'my_table2 = 'ba`_^]h[ZYXWVUTSRQPONML ...
IDA真机调试安卓so文件
IDA真机调试安卓so文件简要看了网上很多的IDA真机调试安卓的文章,感觉很多步骤没有必要,这里整理一下最简单的实现安卓真机调试的步骤,以便以后参考,以 2021NCTF easy_mobile题目举例
步骤
首先需要一个root 后的手机,用数据线连接电脑,并且开启USB调试
电脑安装好 adb
运行adb devices 观察设备是否已经连接
来到IDA安装目录的文件夹,将 用adb push 电脑源目录 安卓的目的目录 将 dbgsrv对应的文件放到手机文件的某个目录下
运行adb shell 然后su 切换到root权限,来到对应的目录下
给 android_server 和 android_server64加可执行权限
观察此题check_flag函数在libnative-lib.so文件中,为arm64架构
运行对应的server, 这里运行的是./android_server64
端口转发adb forward tcp:23946 tcp:23946
打开IDA,拖入对应的so文件,选择Remote ARM Linux/Android ...
2021GFCTF部分RE_WP
2021GFCTF RE_WPwordy去除花指令
123456789addr =0X556AE377FD56end = 0x0556AE377FE40flag = ""for i in range(addr, end, 13): c = get_bytes(i+4, 1)[0] flag+=chr(c) print(flag)# GFCTF{u_are2wordy}
BabyReverseIDA打开,去除所有的花指令
直接看下面对flag如何加密的,进入sub_412E10, 发现是SM4加密
而传入的第二个参数是key,即byte_4409c0是key,回到main函数再往上看,发现前面有一个对byte_4409c0类似RC4加密的操作,
对 byte_4409C0进行交叉引用
于是下断点调试来获取key,发现不行,猜测前面是反调试,从main函数头部下断点调试
最终定位到这个函数
采用的是self_mapping技术实现反调试,本质是创建secion的时候设置SEC_NO_CHANGE,映射后不能改变
S ...
2021 L3HCTF 部分RE WP
2021 L3HCTF 部分RE WPdouble-joyIDA打开程序,找到main函数进行分析
最关键的是enc_flag 函数, 经过调试,发现传入的参数有2套,都是固定的结构体
1234567typedef struct _struc_1{ BYTE* pKey; //指向OPCODE _DWORD* pFlag; //指向FLAG,主要这个FLAG前40个字节是用户输入的,后面一大部分要留给程序用 int i; //指向OPCODE的索引 int stack; //指向了一些 “操作数”,在OPCODE 中存着,比如OPCODE是 \XE的话,后面4个字节就是一个“操作数”}struc_1;
进入 enc_flag函数,F5,发现很乱,然后patch掉一些用于对齐的代码后,F5, 发现是个VM
调试,发现一共执行了0XCA次 enc_flag, 并且传入的参数是交替的
还原程序代码
1234567891011121314151617181920212223242526272829303132333435363738394041 ...
2021强网拟态_babyre
2021强网拟态rebabyreIDA动态调试,进入关键函数
分析函数,提取数据,还原算法
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142#include <stdio.h>typedef unsigned char BYTE;typedef unsigned long DWORD;char _flag[] = "1234567890123456";DWORD cmp_d ...
陇原战"疫"2021网络安全大赛_RE_WP
陇原战”疫”2021网络安全大赛_RE_WPEasyRe方法一IDA打开分析
发现sub_4111406这个函数是对输入的flag进行加密,然后将加密后的数据存放到0X41A14C中
来到sub_4111406函数,并不能F5, 直接动态调试一直跟
、
发现程序在不断的生成一些数据,长度是32
多次调试,不同输入,这里获取的数据是一样的
分析,还原算法
12345678910111213141516171819202122232425262728293031323334#include <stdio.h>#include <windows.h>DWORD * enc(char* flag, char* key){ DWORD* pdw_flag = (DWORD*)flag; DWORD* pdw_key = (DWORD*)key; for (int i = 0; i < 8; i++) { pdw_flag[i] ^= pdw_key[(7 * i + 2) % 8]; } for (int i = 0; i ...
win32学习笔记
字符编码1. ASCII编码0 - 7F, 0000 0000——–0111 1111标准ASCII码80 - FF 1000 0000 ——-1111 1111 扩展ASCII码
2.GB2312或GB2312-80(针对自己国家)基于扩展ASCII码
单独看每一个字节,都是扩展ASCII码表中的数据,2个表示一个汉字,这就是GB2312编码,但是GB2312存在很大的弊端,例:将一份GB2312编码的邮件发给一个老外的时候,它看到的是乱码,因为不同国家的解释不一样,Big5编码的思路跟GB2312一样,同样的字节,不同的数据,因为解释的不一样怎么解决问题这个乱码问题呢?UNICODE出现
3. UNICODE这是一个编码方案,说白了就是一张包含全世界所有文字的一个编码表,只要这个世界上存在的文字符号,统统给你一个唯一的编码:UNICODE编码范围是: 0 - 0X10FFFF, 可以容纳100多万个符号!
UNICODE 的问题?
假如说:
中: 0x12 34
国:0x01 23 45
A: 0x41
用多少个字节来存储呢?UNICODE只是一个符号集,它只规定了符号 ...