自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(114)
  • 收藏
  • 关注

原创 REVERSE-COMPETITION-APPCTF-2025

2025数字中国创新大赛数字安全赛道移动互联网(APP)安全积分争夺赛初赛。

2025-04-01 17:48:18 951 2

原创 REVERSE-COMPETITION-CCSSSC-2025

读输入前有条打印”plz input your flag”,肯定是在.init_array,确实有很多。首先是生成会话密钥,也就是rc4密钥,两个大数分别是模数n和私钥d,公钥e为65537。前8字节是左shift,切大小写的,后4字节是键码,找个表映射回去即可(写的比较乱😓。从内核读数据,先做rc4加密,再做基于表的替换,每轮的表根据时间戳设置。先不管,往下看,类似一个函数指针数组,通过偏移调用函数。elf64,ida反编译不太行,有花指令,直接调汇编。调试发现确实是rc4,直接异或回去发现不对。

2025-01-06 19:10:06 1026 2

原创 REVERSE-COMPETITION-CISCN-2025

最终得到flag{813a97f3d4b34f74802ba12678950880}注意左移4bit后又&0x3a3affff,会丢失8bit,需要爆破。对于每个int,先claripy求解的范围,然后爆破验证第二步。读16进制,分成4个4字节的int,每个int做两步运算。魔改的xtea,改了左移右移位数,delta,轮数。两步依次验证,第一步验证成功后才会进行第二步验证。第一步,右移28bit,左移4bit,然后拼接。rc4是标准的,密钥是”testkey”第二步,输入还是原本的4字节。

2024-12-15 21:12:06 858

原创 某程xxmain.so花指令去除记录

最近想要练习练习脚本去花,去混淆,解密字符串但是感觉自己加花/混淆出来的样本太简单了在龙哥星球看到xccccccc师傅发了一篇某程xxmain.so的去花和算法还原的文章记一次xxmain.so从去花到魔改算法还原so里的花指令强度还算可以,模式比较固定,非常适合练习xccccccc师傅文章里App版本是8.0.65,可以说是很老,笔者在豌豆荚也下不到,于是用的8.74.6版本好在目标方法仍被保留,其在so中的偏移是0xc2794。

2024-10-22 16:56:21 1527

原创 Android二代抽取壳简易实现和踩坑记录

如果想要得到某个方法真实的method_idx,就需要解析所属类的其他方法的encoded_method结构,非常麻烦。ShellApplication,相较于一代整体壳中的代码,增加了两个方法,而且结构非常像,只是解压出的目录不同。笔者用了一个全局方法序号去标识所抽取的方法代码,从而避免在so层对dex文件的重新解析(其实就是偷懒了)在抽取方法代码时没有保留方法在方法表中的索引method_idx,而是保留了一个全局方法序号。packer,基本同一代整体壳的加壳代码,增加了对源程序dex方法代码的抽取。

2024-10-18 16:30:32 1452

原创 Android一代整体壳简易实现和踩坑记录

参考资料[9]的loadResources方法通过AssetManager.addAssetPath添加资源路径,按理说可行。加壳后的程序可以顺利启动,也正常走到了源程序的MainActivity,但在onCreate中加载的布局却是壳程序的资源。关于资源处理,参考资料[8]直接替换资源文件的方法可行,但要求源程序的MainActivity继承Activity。笔者这里是从壳程序和源程序编译好的Apk包里提取出关键文件,处理后再打包成新的Apk,MT管理器签名安装。dex追加参考[1],但略有不同。

2024-10-18 15:40:31 1218 1

原创 SUSCTF2024-Redroid-出题笔记与解题思路

key仍然是password,label是固定的"check",也就是壳so的名称,后面找壳so的soinfo时会用到。区别在于安卓13/14系统的soinfo结构成员的偏移不太一样,一个是next的偏移,另一个是so名称字符串的偏移。这里orielf的前0x40字节,也就是ELF头,是不正确的,因为第一个PT_LOAD段包含了ELF头的范围。unidbg模拟的好处是不用去找解密so的加载地址,解密so的加载地址是在加载过程中由壳so分配的,不易获取。

2024-09-24 13:46:14 1355

原创 REVERSE-COMPETITION-ByteCTF-2024

blutter恢复部分符号,libapp检查长度是否为45,然后调用babyapk_src_rust_api_simple_::m3N4B5V6_265088。画图即可,边的from和to顺序无所谓,但是点是从后向前保存的,索引的时候需要减一下。同理观察点周围的数据,0627是x坐标,7D是y坐标,8是Dot字符串的长度。观察边周围的数据,77和75是连接的两个点的序号,9是Edge字符串的长度。获取5段已知的字符串,拼接,注意拼接时str_5用了两次,没用str_1。

2024-09-23 14:30:28 1192

原创 Windows编译Hikari-LLVM15[llvm-18.1.8rel]并集成到Android Studio NDK

as的agp可能不是用的上述版本的ndk,需要在build.gradle.kts指定ndk版本。下的clang.exe、clang++.exe、clang-cl.exe。启用混淆,同样在build.gradle.kts配置,更多用法参考。下的clang.exe显示版本18.0.2,差别不是太大。同样通过android studio安装。创建"MinGW Makefiles"通过android studio安装。参考(3)中对各参数的解释如下。解压出来给个环境变量。

2024-09-06 18:36:10 1883 2

原创 REVERSE-COMPETITION-CISCN-2024

(实际上就是SM4 CTR模式,CTR就是randbytes1,之前没见过,虽然有个NewCTR,但是当时没反应过来。解密xxtea,需要注意的是要把上一步结果中最后的0xf3554bb6去掉,对应的是04040404(padding。然后把randbytes1最后1字节加1得到randbytes2,再加1得到randbytes3。sm4加密的密文即为randbytes1+ randbytes2+ randbytes3。拼接randbytes1和上一步异或的结果,进行标准的aes cbc和base32。

2024-05-20 10:48:07 1285 2

原创 某书Frida检测绕过记录

本来想要分析请求参数加密过程,结果发现APP做了Frida检测,于是记录一下绕过姿势(暴力但有用)Frida版本:16.2.1APP版本:8.31.0。

2024-04-19 21:28:12 7475 18

原创 REVERSE-COMPETITION-VNCTF-2024

ko的随机数算法没看出来,可惜~这里给自己打个广告:东南网安研二在读,求实习,求内推,求老板们多看看我QAQ。

2024-02-29 10:00:15 1887 4

原创 REVERSE-COMPETITION-DSCTF-2022

ida打开my_plugin.dll,函数窗口第一个函数f,最后调用了memcmp函数,猜测这个f就是校验函数。观察此时的input,发现程序在调用f函数前,对原本的输入进行了位置变换和标准base64变换。frame_data是每一帧填充的像素,总共2192帧,每帧的大小为宽240*高180。verilog写的vm,flag的4个int,4选2,选4组做加法,和data比较。在f函数的第一行代码处下断点,通过尝试,当输入的长度为30时,程序会断下来。第32到第45行代码,是将input倒置。...

2022-08-04 14:24:31 1571 1

原创 REVERSE-COMPETITION-HWS-5TH-2022

解SMC,在StartAddress处创建函数,反编译,输入和byte_41B30A异或,调试得到byte_41B30A==0x48。进入TEA函数,发现是魔改TEA,需一次性传入8个unsignedint,delta已知,key已知。输入的长度应小于420,trans是将输入的字符,三个一组,转成36进制,每组存储为两个字节。对输入查找交叉引用,来到sub_4013D0函数,输入和下标异或,结果与已知的res比较。解RSA,将明文用16进制表示,每两个16进制转成三个10进制,不足三位的补0即可。...

2022-08-02 15:08:36 754 3

原创 REVERSE-COMPETITION-HGAME2022-Week4

REVERSE-COMPETITION-HGAME2022-Week4( WOW )serverezvmhardasm( WOW )32位exe,ida打开观察伪代码逻辑,上面的红框中,输入经过加密,密文放入Buf2中,然后Buf2和已知的密文res比较比较完,打印"win"或者"error"发现下面还有一部分对Buf2处理的代码逻辑,而且几乎和上面对输入加密的结构是一样的于是猜测下面的红框中就是解密逻辑起调试,随便构造一个长度为32的输入在调用memcmp前下断,将内存中Buf2的数据p

2022-02-18 20:38:14 1213

原创 PWN-COMPETITION-HGAME2022-Week4

PWN-COMPETITION-HGAME2022-Week4vectorvectorc++写的pwn,实现了vector,没有edit功能,新增了move功能add或move时,如果输入的下标大于vector的size,vector会进行resize扩容旧vector占用的chunk自动被free掉进入相应的bin,数据转移到新vector中利用add时的vector扩容,free掉size大于0x410的chunk,使其进入unsorted bin,泄露libc利用move时的vector扩

2022-02-18 20:36:34 595

原创 REVERSE-COMPETITION-HGAME2022-Week3

REVERSE-COMPETITION-HGAME2022-Week3Answer's Windowscreakme3hardenedfishmanAnswer’s Windows含有GUI的程序,ida打开,Shift+F12打开字符串窗口发现"right"和"wrong"对"right"查找交叉引用,来到sub_140002300函数分析知道sub_140001F90是个变表base64,但是不知道变表启调试,在如下图所示处下断,这里是生成变表的地方调试时修改ZF标志位使程序能够执行i

2022-02-13 14:48:42 9915 3

原创 PWN-COMPETITION-HGAME2022-Week3

PWN-COMPETITION-HGAME2022-Week3changeable_noteelder_notechangeable_noteelder_notedelete_note中存在UAF漏洞首先利用unsorted bin泄露libc然后通过double free覆盖__realloc_hook为one-gadget,__malloc_hook为realloc真实地址(调整栈帧)# -*- coding:utf-8 -*-from pwn import *from pwnlib.u

2022-02-13 14:42:57 2766

原创 REVERSE-COMPETITION-HGAME2022-Week2

REVERSE-COMPETITION-HGAME2022-Week2xD MAZEupx magicfake shellcreakme2xD MAZE迷宫题,不过不是上下左右,而是只有前进0-512,1-64,2-8,3-1,每一次v14加上前进的单位后,需保证map[v14]==32地图map的大小为4096,即64x64将map转成64x64的形式,并将map中所有的32化为1,所有的非32化为0于是0-512-向下8行,1-64-向下1行,2-8-向右8个单位,3-1-向右1个单位,手

2022-02-04 22:34:55 2198 3

原创 PWN-COMPETITION-HGAME2022-Week2

PWN-COMPETITION-HGAME2022-Week2blind(unsolved)echo_severoldfashion_noteblind(unsolved)echo_sever堆上的格式化字符串漏洞当输入的v0为0时,realloc(ptr,0)相当于free(ptr)于是考虑将free_hook写为one-gadget# -*- coding:utf-8 -*-from pwn import *context.log_level="debug"io=process(".

2022-02-04 22:32:37 1957

原创 REVERSE-COMPETITION-HGAME2022-Week1

REVERSE-COMPETITION-HGAME2022Week1easyasmcreakmeFlag Checker猫头鹰是不是猫Week1easyasm程序一开始将si设置为0,然后si和28比较,如果si小于28则进入循环循环体中,si作为下标,从输入中取值存入al,然后al左移4位,压入栈保持下标si不变,再重新从输入中取一次值存入al,然后al右移4位右移4位后的结果与之前左移4位的结果相加,然后异或0x17,最后与已知比较整个过程相当于将输入中的每一个值的高4位和低4位交换,然

2022-01-28 20:40:59 2407 3

原创 PWN-COMPETITION-HGAME2022-Week1

PWN-COMPETITION-HGAME2022Week1enter_the_pwn_landenter_the_evil_pwn_landoldfashion_orw(unsolved)ser_per_fa(unsol)test_your_nctest_your_gdbWeek1enter_the_pwn_land栈溢出,需要注意的是下标 i 的地址比输入s的地址更高s溢出会覆盖 i ,于是需要小心地覆写 i 的值,让循环顺利执行下去然后就是常规的ret2libc# -*- coding:

2022-01-28 20:36:36 1501

原创 PWN-PRACTICE-CTFSHOW-8

PWN-PRACTICE-CTFSHOW-8吃瓜杯-wuqian月饼杯II-简单的胖月饼杯II-容易的胖击剑杯-pwn01-My_sword_is_ready吃瓜杯-wuqian栈溢出,ret2text# -*- coding:utf-8 -*-from pwn import *context.log_level="debug"#io=process("./pwn1")io=remote("pwn.challenge.ctf.show",28059)elf=ELF("./pwn1")sy

2022-01-18 19:08:21 2070

原创 PWN-PRACTICE-CTFSHOW-7

PWN-PRACTICE-CTFSHOW-7大吉大利杯-easyrop大牛杯-guess吃鸡杯-win_pwn吃鸡杯-easy_canary大吉大利杯-easyrop栈溢出,SROP# -*- coding:utf-8 -*-from pwn import *context.log_level="debug"context.arch="amd64" #32位和64位的sigframe结构不同,需要指定处理器架构#io=process("./pwn1")io=remote("pwn.chall

2022-01-18 14:40:55 2081

原创 PWN-PRACTICE-CTFSHOW-6

PWN-PRACTICE-CTFSHOW-636D杯-MengxinStack36D杯-tang1024杯-1024_happy_stack1024杯-1024_happy_checkin36D杯-MengxinStack程序开了canary和PIE保护泄露远程libc版本,为 libc6_2.23-0ubuntu10_amd64.sofrom pwn import *io=remote("pwn.challenge.ctf.show",28124)io.recvuntil("She said:

2022-01-18 10:56:51 1978

原创 PWN-PRACTICE-CTFSHOW-5

PWN-PRACTICE-CTFSHOW-5BJDCTF2020-router36D杯-签到36D杯-babyFmtstr36D杯-MagicStringBJDCTF2020-router36D杯-签到栈溢出,用ROPgadget找到一个"sh"字符串,ROP,程序过滤了cat和空格,more<flag绕过即可# -*- coding:utf-8 -*-from pwn import *context.log_level="debug"#io=process("./pwn1")io=

2022-01-16 16:58:19 684 2

原创 PWN-PRACTICE-CTFSHOW-4

PWN-PRACTICE-CTFSHOW-4BJDCTF2020-babyrouterBJDCTF2020-babystackBJDCTF2020-dizzyBJDCTF2020-encryptde stackBJDCTF2020-babyrouter栈溢出,ret2libc# -*- coding:utf-8 -*-from pwn import *context.log_level="debug"#io=process("./pwn1")io=remote("pwn.challenge.c

2022-01-16 12:06:34 992

原创 PWN-PRACTICE-CTFSHOW-3

PWN-PRACTICE-CTFSHOW-3pwn10萌新赛-签到题萌新赛-数学99内部赛-签到题pwn10格式化字符串漏洞,覆写num为16即可打印出flag# -*- coding:utf-8 -*-from pwn import *context.log_level="debug"#io=process("./pwn1")io=remote("pwn.challenge.ctf.show",28045)elf=ELF("./pwn1")#gdb.attach(io,"b * 0x0

2022-01-13 16:10:19 845

原创 PWN-PRACTICE-CTFSHOW-2

PWN-PRACTICE-CTFSHOW-2pwn05pwn06pwn0701栈溢出之ret2textpwn05栈溢出,覆盖返回地址为后门函数getFlag起始地址即可# -*- coding:utf-8 -*-from pwn import *context.log_level="debug"#io=process("./pwn1")io=remote("pwn.challenge.ctf.show",28091)elf=ELF("./pwn1")getFlag=0x08048486

2022-01-13 10:32:32 378

原创 PWN-PRACTICE-CTFSHOW-1

PWN-PRACTICE-CTFSHOW-1PWN签到题pwn02pwn03pwn04PWN签到题nc连上去就会打印flagpwn02栈溢出,覆盖返回地址为后门函数stack起始地址即可# -*- coding:utf-8 -*-from pwn import *#io=process("./pwn1")io=remote("pwn.challenge.ctf.show",28194)elf=ELF("./pwn1")stack=0x0804850Fio.recvuntil("3

2022-01-13 10:06:20 532

原创 C语言实现SM4加解密算法

C语言实现SM4加解密算法SM4加解密SM4加解密#include <string.h>#include <stdio.h>#include <time.h>/*--------------------------------------------------------------------------------------------------------------*/#define SM4_ENCRYPT 1#define SM4_D

2021-11-19 19:48:11 9040 2

原创 C语言实现RC4加解密算法

C语言实现RC4加解密算法RC4加解密RC4加解密#include<stdio.h>void rc4_init(unsigned char* s, unsigned char* key, unsigned long Len_k){ int i = 0, j = 0; char k[256] = { 0 }; unsigned char tmp = 0; for (i = 0; i < 256; i++) { s[i] = i; k[i] = key[i % Len_

2021-11-19 19:44:24 7942 3

原创 C语言实现DES加解密算法

C语言实现DES加解密算法DES加解密DES加解密#include <stdio.h>#include <stdlib.h>#include <string.h>/*--------------------------------------------------------------------------------------------------------------*/typedef unsigned char ubyte;/*------

2021-11-19 19:40:20 2991 1

原创 C语言实现AES加解密算法

C语言实现AES加解密算法AES加解密AES加解密#include <stdio.h>#include <stdint.h>#include <memory.h>/****************************************************************************************************************/typedef enum { AES_CYPHER_128, AES_

2021-11-19 19:36:40 8599 2

原创 C语言实现TEA系列加解密算法

C语言实现TEA系列加解密算法TEA加解密XTEA加解密XXTEA加解密TEA加解密#include <stdio.h>#include <stdint.h>void encrypt(uint32_t* v, uint32_t* k) { uint32_t v0 = v[0], v1 = v[1], sum = 0, i; uint32_t delta = 0x9e3779b9; uint32_t k0

2021-11-19 16:40:20 4727 1

原创 REVERSE-PRACTICE-CTFSHOW-8

REVERSE-PRACTICE-CTFSHOW-8Matara OkinaanniuwarmupeMatara Okinaapk文件,jadx-gui打开MainActivity什么都没有,来到FlagActivityscheme,host这些看不懂第44行有个ans和bytes的比较,ans已知,bytes是从某个地方获得的参数,然后对bytes做异或运算写脚本得到bytesans="@lgvjocWzihodmXov[EWO"ans_num=[ord(c) for c in ans]

2021-11-19 11:16:26 2118

原创 REVERSE-PRACTICE-CTFSHOW-7

REVERSE-PRACTICE-CTFSHOW-6签层饼Tea_tube_poteasy贪吃蛇的秘密签层饼32位exe,ida打开main函数中,输入两个大于0的数字,如果flag_num为0,则将两个输入作为flag的一部分,打印flag对input_1按x查找交叉引用,发现一条由input_1参与的cmp指令跟进过去,判断input_1==input_2^333509是否成立,一般来说这种判断都需要成立才行再对input_2查找交叉引用,同样发现一条由input_2参与的cmp指令

2021-11-18 18:32:35 1131 3

原创 REVERSE-PRACTICE-CTFSHOW-6

REVERSE-PRACTICE-CTFSHOW-6真的是签到批量生产的伪劣产品来一个派森真的是签到批量生产的伪劣产品来一个派森

2021-11-18 18:30:36 1489

原创 REVERSE-COMPETITION-GeekChallenge2021

REVERSE-COMPETITION-GeekChallenge2021

2021-11-15 12:28:30 5148

原创 PWN-COMPETITION-GeekChallenge2021

PWN-COMPETITION-GeekChallenge2021

2021-11-15 12:26:38 896

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除