运行时压缩
一.数据压缩对于数据压缩都比较熟悉,下面简单梳理一下相关知识。数据压缩(Data Compression )是计算机工程的主要研究内容,经过数十年发展已经有了深入研究,今后还会不断出现更多、更好的算法。如果日常生活中能够非常容易地压缩某个物体该多么方便啊!也就不再需要仓库、停车场、集装箱了,当然,得能压缩才行。而在数码世界,(只要不是压缩过的信息)任何信息都能轻松压缩。不论哪种形态的文件(数据)都是由二进制(0或1 )组成的,只要使用合适的压缩算法,就能缩减其大小。
经过压缩的文件若能100%恢复,则称该压缩为“无损压缩”(Lossless DataCompression );若不能恢复原状,则称该压缩为“有损压缩”( Loss Data Compression )。
1.无损压缩无损压缩用来缩减文件(数据)的大小,压缩后的文件更易保管、移动。使用经过压缩的文件之前,需要先对文件解压缩(此过程中应该保证数据完整性)。各位肯定用过类似7-zip、“面包房”的压缩程序,用它们压缩文件就是无损压缩算法。最具代表性的无损压缩算法有Run-Length、Lempel-Ziv、Huffman等。此 ...
BUUCTF--findKey
BUUCTF–findKeyIDA打开,发现没有直接找到加密函数,通过字符串查找**flag{}**找到函数,发现没有转换成函数,选中区域,通过p键转换成函数。
将0kkd1a55k222k2a776jbfgd`06cjjb给了str,SS给了v13,sub_401005函数发现是一个异或,那就是str和v13异或,下面一个if判断String1和Str是否相等。回过头去找String1在哪里出现过,发现上面的sub_40101E对String1进行了加密
API CryptCreateHash,0x8003u可以知道是MD5
接下来unk_423030给v12,与原来的String1异或
第一个过程,使用0kkd1a55k222k2a776jbfgd`06cjjb和SS异或,得到c8837b23ff8aaa8a2dde915473ce0991,md5解密得到String1=123321
123456789101112131415161718# -*- coding:utf-8 -*-a = "0kk`d1a`55k222k2a776jbfgd`06cjjb"b ...
IDC脚本
IDC的变量idc使用三种基本数据类型 整形,字符串,浮点值
idc使用auto关键字声明变量,使用extern关键字声
明全局变量
auto var = 1; //局部变量
extern var2 = 1; //全局变量
IDC的运算符idc支持绝大部分c的运算符,但是不支持如+=的复合运算符,并且idc所有整数操作数
均作为有符号处理,移位运算符如>>总是进行算术移位,想要完成逻辑移位,必须手
动进行位运算。字符串是idc的基本类型,所以可以执行+号运算符拼接字符串。IDC语句
idc不支持switch语句其他语句风格与c一致,以分号结束语句。
IDC函数idc仅在idc的独立程序脚本中支持定义用户的函数。使用static关键字声明函数,可以使用return
返回一个值,return并非必须。参数为&a表示传引用
static func(a,b,c){
//函数体
}
IDC实用函数1)void PatchByte(long addr , long val) 设置虚拟地址addr处的一个字节值,PatchByte可更换为PatchWo ...
2021巅峰极客reverse
baby_maze看题目本来以为是一道简单的迷宫题,进去之后才发现这么多函数
先找一下string,发现了一个God job这应该就是最后的结果
那可以想到通过这个函数去查看调用它的函数,一步步逆推回去,都是发现是行不通的,函数太多了有7000多个,没有办法找回去,做的时候前后都走不通
后来才知道可以用后向调用为gen_r_call_chain函数,它递归地调用了get_my_caller函数来实现后向调用的追踪.接下来就可以在下面的交互终端run我们的函数:
1gen_r_call_chain('sub_54DE35', 600, 'sub_40187C')
可以的到几个路径,看第一个符合,再加上第一个函数的S就是最后的结果
MD5一下就可以得到最后的flag
1flag{078c8fbc1d0d033f663dcc58e899c101}
MedicalApp题目给了一个安卓APK,APK的主要逻辑都在native里面。
再chk函数里面就是加密过程,用到了RC4+xxtea
找到密钥
xxtea的解密
12 ...
BUU-reverse3
[BJDCTF2020]BJD hamburger competition]识别Unity游戏
Android平台的apk包可以直接解压,看是否有./assets/bin/Data/Managed目录,也可以查看lib文件夹下面包含的一些so,如果有libmono,libunity等模块,基本可以确定是unity游戏了。
Android平台中C#编写的主逻辑模块代码静态编辑之后存储于Assembly-CSharp.dll文件中。因为unity的跨平台,Android平台是unity编译的游戏,那么其对应的IOS平台上也是unity编译出来的。如果希望直接从IOS上面去看是否是unity游戏,可以提取游戏中的主模块查看是否有unity之类的函数即可。
这道题找对文件分析就行,dnSpy打开Assembly-CSharp.dll文件
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697 ...