AntCTF & Dˆ3CTF 2022(d3arm+d3w0w)
AntCTF & Dˆ3CTF 2022(d3arm+d3w0w)d3arm得到了一个bin的文件,如果想要得到代码需要将这个bin文件转化成hex文件,使用bintohex这个软件,得到hex文件,然后将这个hex文件载入到ida之中,将hex文件载入ida的时候需要设置一些参数,这个过程可以参考这篇文章
将这个hex文件载入ida之中之后,查看字符串,根据图中标记的字符串跟进到关键代码的位置
关键主代码图中标记的地方就是可能是flag的地方
引用了flag的函数在这个函数里面不能够得到什么数值的有效信息,所以查看引用该函数的其它函数,但是这里通过交叉函数我并不能找到有效的函数,翻看这个函数上下的函数,找到一个引用了point和flag地址的一个函数,将point作为下标,给flag进行赋值的操作
通过地址0x800DB64,在汇编代码的界面之宗,点击G 输入跳转到0x000DB64这个地址,就可以找到这个数组了
这个数组是(上图之中只是部分的数据,一共要取42个数字)
1[0x20,0x6d,0x50,0x30,0x38,0x48,0x20,0x6d,0x5,0x2 ...
SUSCTF_tttree(使用idapython去混淆的学习)
SUSCTF_tttree(使用idapython去混淆的学习)这道题里面有大量的相同结构的混淆,所以采用了idapython的方式解混淆,这道题需要就是学习用idapython解混淆的过程。后面的平衡树的算法太难了,就没有继续往下解了。
混淆这里面有两个混淆,出题人声称采用了 这里参考了古月浪子大佬的一个混淆思路。
混淆一重构序列
花指令形式特征:
12345678910push rax push rax pushfq call $+5 pop rax add rax,xxxx push rax mov [rsp+10h], rax popfq pop rax
作用:
当该花指令的后面接着的是retn这个指令的时候,就是跳转到这个计算得到的地址
当该花指令的后面接着的是jmp addr2这个指令时,相当于call addr2(addr1就是这个指令之后的返回地址)
解混淆的方法:
如果是retn指令时:通过“pop rax”和”add rax,xxxx”这两个指令计算得到需要jmp的偏移地址,将jmp+偏移地址的指令写入花指令这个地方的地址,其余空间地址“nop”
如果时jmp a ...
susctf(DigitalCircuits+hello_word)
SUSCTF(DigitalCircuits+hello_word)官方的WP
DigitalCircuits这是一个pyc反编译的题目
pyc文件转换成py文件这是一个将pyc打包成地exe文件,首先使用软件解包,这个软件反编译出来地主程序并不是一个pyc文件,需要自己通过instruct这个文件修改这个文件地格式
将pyc文件用unemployed6 编译为py文件,然后得到源代码,分析代码,发现这是一个tea加密
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126# uncompyle6 versi ...
安卓逆向之native层的so文件格式
安卓逆向之native层的so文件格式安卓逆向的相关工具介绍反编译代码的工具:
dex2jar:把dex文件转成jar文件
jd-gui: 这个工具用于将jar文件转换成java代码
反编译资源的工具:
APKTool: 本文重要工具,APK逆向工具。它可以将资源解码,并在修改后可以重新构建它们。它还可以执行一些自动化任务,例如构建apk。解码就是将其恢复成未打包的资源文件(包括resources.arsc,class.dex,9.png和xml);解码的资源可以重新打包成apk/jar文件;组织和处理依赖于框架资源的APK;Smali调试;执行自动化任务
JEB:JEB是一个功能强大为安全专业人士设计的安卓应用程序反编译工具,用于逆向工程或者审计apk文件。它是可以直接反编译apk文件的。
jadx:jadx是一款反编译利器,同时支持命令行和图形界面,能以最简便的方式完成apk的反编译操作。工具支持apk、dex、jar、aar等格式的文件
so文件介绍概念:.so 文件是ELF对象文件中可被共享的对象文件(Shared object file),这些就是所谓的动态库文件。
...
迷宫_逆向
迷宫_逆向深度优先算法介绍
深度优先搜索算法(Depth-First-Search),是搜索算法的一种。是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。属于盲目搜索。
深度优先算法在迷宫中的使用二维的迷宫:
使用递归的方法,用栈的思想放入和取出路径,用数组的方式存放迷宫图
使用for循环遍历四个方向,在每个节点选择走的方向,如果按这个方向向下走一步能够满足条件(不是墙并且没有到达过),就可以将这一步的目标地址进行标记(已经走过),并且将走的方向放入路径之中
当死路的时候就会向上返回。如果四个方向都遍历,没有一个方向能够满足条件,那么就会返回上一轮,并且将这步错误的方向在路径之中去除,并且将这个地址再次标记为未可达
递归的结束条件。已经到达了目标地址的坐标,就可以返回这个路径了
二维迷宫题算法实现C语言版本map:迷宫地图,数组需要在声明的时候进行初 ...
TEA系列加密解密
TEA系列加密解密TEA加密解密介绍
在密码学中,微型加密算法(Tiny Encryption Algorithm,TEA)是一种易于描述和执行的块密码,通常只需要很少的代码就可实现。
代码的特点:
加密使用的数据为2个32位无符号整数,密钥为4个32位无符号整数即密钥长度为128位(当加密解密的对象是一串数组的时候,需要将这个32位无符号整数的数组每两个32位无符号整数划分为一组,对每一组数据单独加密解密得到结果)
该算法使用了一个常数 δ 作为倍数,它来源于黄金比率,以保证每一轮加密都不相同。但 δ 的精确值似乎并不重要,这里 TEA 把它定义为 δ=「(√5 - 1)231」(也就是程序中的 0×9E3779B9)作为魔数
加密过程拥有一个叫做Feistel 结构的密码学结构。这种密码学结构通俗的来讲就是会将加密的plaintext分成L、R两部分,并且满足 L_{i+1} = R_i, R_{i+1} = F(K_i,R_i) \oplus L_i 这种交换式的加密方式的一种结构。
TEA加密算法的实现参数要求:输入一定要是一个 ...
BUUCTF的Dig the way - 栈溢出
BUUCTF的Dig the way - 栈溢出这是一道栈溢出的题目
进入到主函数里面
首先就是读取data之中数据的代码
通过代码我们可以知道这个地方并没有对数据的写入长度进行限制
fseek函数fseek()函数可以移动文件的读写指针到指定的位置,即移动当前文件的位置指针,其原型为: int fseek(FILE * stream, long offset, int fromwhere);
【参数】stream为文件指针,offset为偏移量,fromwhere为指针的起始位置。
参数 offset 为根据参数 fromwhere 来移动读写位置的位移数。参数 fromwhere 为下列其中一种:
SEEK_SET:从距文件开头 offset 位移量为新的读写位置;
SEEK_CUR:以目前的读写位置往后增加 offset 个位移量;
SEEK_END:将读写位置指向文件尾后再增加 offset 个位移量。
例子:
将读写位置移动到文件开头:fseek(fp, 0, SEEK_SET);
将读写位置移动到文件尾时:fseek(fp, 0, SEEK_END);
将读写位置 ...
VNCTF_2022
VN2022cm狗用jadx软件载入这个apk文件
判断flag的函数
判断的函数
loadDexClass()的这个函数
这里copyfile了一个dex的文件,这里copyFile()函数里面应该还有一系列的操作,一系列操作的结果最后写入了创建的一个文件里面
找到这个文件,并且找到这个函数
该函数的详情
主要的代码
注意这个地方是每次取1024出来,外层有个while(true)的循环的操作
得到的这个文件名称是 classes.dex
对文件进行操作的脚本:
1234567v0 = 'vn2022'with open("D:\\re\\buuctf\\VN\\3\\ooo",'rb') as f1: c = f1.read()with open("D:\\re\\buuctf\\VN\\3\\out",'wb') as f2: for i in range(len(c)): f2.write((c[i]^ord(v0[i %1024 % l ...