VN2025
逆向1.kotlindroid先在手机上运行一下 发现字符串check your flag here 因为用jadx打开这个apk,然后传统方法找到MainActivity发现根本看不懂。就直接搜字符串吧 然后跳过去查看代码,虽然说 Kotlin 代码 不好看懂,不过这里大致看出什么逻辑 再结合手机上,我输错了就是wrong字符串看出,这里的check应该就是检查逻辑,前面有一大段代码都是什么初始化界面,这里的密文发现是base64编码,加密也 可以看出是AES/GCM,GCM的加密需要密钥,IV,tag 提示说tag就是密文的一部分,先不管 1.求密钥 这里就是两个keybyte数组,分别经过异或23,和8 然后拼接组成密钥,这里看出byte2来自Config类的方法 def generate_key(): key1 = [118, 99, 101, 126, 124, 114, 110, 100] key2 = [123, 113, 109, 99, 97, 122, 124, 105] ...
metasec-花指令
1.函数跳板-BL-BR 这里跳转到sub_12C6A4函数时候会将下一个指令也就是返回地址压入栈中,然后跳转过去,注意这个时候。函数内部是将x0也就是下一个地址返回,然后进行了加法跳转,形成了一个简单的间接跳转 简单计算然后nop 1.2 这里跳板函数的上下都用到了,所以在patch的时候要充分考虑每一种情况 # -*- coding: utf-8 -*-"""v5:批量清除 ARM64 "BL LR-gadget + ADD + BR" 花指令(完整版)识别的花型(ARM64): 形式A: BL gadget ; MOV Ra, X0 ; ADD Ra, Ra, #imm ; BR Ra 形式B: BL gadget ; ADD Rd, X0, #imm ; BR Rd (无 MOV) gadget: SUB SP,#0x10 ; STP X29,X30,[SP] ; LDR X0,[SP,#8] ; LDP ; ADD SP ; RET (作用:把调用者的 LR...
ttEncrypt VMP反编译插件
某音35.2.0,简单记录结合AI对抖音自定义VMP进行编写VMP插件进行可视化还原的过程 1.逆向VMP结构这部分是去年年底完成的,所以分析大部分是手动完成的,如今看来,AI应该只需要一个小时就可以完整还原整个VMP结构以及handle对应指令 post请求密文/ttEncrypt可以hook 控制com.ss.android.common.applog.sendEncryptLog的方法 https://hyb.life/archives/207 1.确定这个方法对post请求进行了加密 加密方式是gzip+EncryptorUtil.ttEncrypt 2.逆向这个ttEncrypt方法 package com.bytedance.frameworks.encryptor;import com.GlobalProxyLancet;import com.bytedance.common.profilesdk.ProfileManager;import com.bytedance.qss.common.catcher.CatcherTrace;/* loaded...
色粉产业链的风控对抗
本文单纯用于科普,不涉及太多技术本身 1.背景在各种引流产业链条中,打”色粉”应该是最暴利的一个产业链,【打色粉】指以美色/擦边内容为饵,将特定高价值转化的用户从公域平台引流至私域平台,最终落到杀猪盘,裸聊欺诈,赌博,付费色情等后价值转化链路。 在互联网急速发展的今天,AI的浪潮下,开发和逆向一个软件愈发容易,黑产为了高效的将色粉引流到自己的平台,往往都是选择开发引流工具去自动化转化 2.引流 一般来讲,工具往往也是分散的,根据笔者的经验,一般来讲,黑产往往会将各个步骤分开,分不同工具或者说手法去集中获粉 第一步-寻找目标用户 大家可以换位思考,如果你是黑产,你为了去找到老色比的uid账号,肯定是去较为暴露/擦边的美女视频/直播去集中获客,这就是黑产的转化区,也是从技术层面的不同手法的产生处,如果我们为了获取暴露视频的评论区,可以通过逆向协议或者模拟自动化获取,两个方式各有优势 维度 逆向协议类 模拟自动化类(无障碍/群控) 原理 逆向 APP 接口,直接发包 无障碍服务模拟真人点击...
GFCTF2026-quickJS官方wp
脱壳 UPX壳 打开010可以发现是比较明显的UPX魔改壳,改成UPX后脱壳就可以脱壳成功 去混淆 进去之后发现是一个间接跳转的花指令,反编译卡住的点是这里的跳转地址的加法常量是取的data取的常数进行的加法,这里也就两种跳法,一个是上图的加法,一个下减法,写一个idapython脚本匹配字节码,然后去patch跳过的字节码和jmp rax就行 import ida_segmentimport ida_bytesimport ida_kernwinimport ida_autoPATTERNS = [ b"\x48\x01\xC8\xFF\xE0", b"\x48\x29\xC8\xFF\xE0",]PATCH_OFFSET = 3 PATCH_LEN = 6 PATCH_BYTES = b"\x90" * PATCH_LENpatched = []def patch_match(ea): patch_ea = ea + PATCH_OFFSET ...
去间接跳转——模拟执行学习
间接跳转这个高级混淆,接触了unicorn,unidbg这种模拟执行脚本后,发现这种特别适合对抗反编译器无法分辨的一些混淆,本文记录学习过程以及以京麒2024的drillbeam为样本尝试去去除间接跳转。笔者的脚本能力确实有限,写的不好的地方大佬们勿喷( 样本unsigned char dizhi[] = { 0x1,0x2,0x3,0x4,0x5 };void rc4_crypt(unsigned char* Data, unsigned long Len_D, unsigned char* key, unsigned long Len_k) //加解密{ unsigned char s[256]; rc4_init(s, key, Len_k); _asm { lea eax, label1 add eax,8 sub eax,7 push ebx mov ebx,OFFSET dizhi movzx ecx,byte ptr [ebx+2] pop ebx add eax, ecx jmp...
360壳分析
https://www.52pojie.cn/thread-679354-1-1.html 以上是针对Oncreate脱壳的文章 为了学习壳这一概念,先是学习了安卓一代壳以及安卓二代壳,在简单的了解到安卓java层防护后,转向学习了自定义linker加载,期间学习到了很多,比如elf文件格式,so加载流程等等,这里为了知识落地,分析分析360壳,后期会逐步了解vmp虚拟化技术,dex2c 等等高级的防护以及混淆技术 https://bbs.kanxue.com/thread-280609.htm 先是判断了系统架构 这点从assets目录下获取so,然后加载都很经典,直接看是哪个so吧 是libjiagu.so,直接分析arm64的libjiagu_a64.so 用ida打开发现符号表被去完了,导入和导出函数也没有 但是我看了这个so,没有看到init,start程序入口函数的逻辑也很密,函数表被去了,看着想是没有经过重定位的半成品,那他该如何加载呢,可能是在加载的时候有其他so在解密这个?为此用了去找so退出和so加载链的frida代码 function hook()...
NCTF
X1c@dM1n1$t 7d53ecd36a43d3d2 37e7dd633dcf8497 409EEC86B884A58B7E8A64E21AD3B8BB x1login过检测首先我们先下载这个题目,因为我的手机开启了root权限所以直接退出了,这里我们直接看看这个,我第一想法是hook这个root检测和debugger检测 Java.perform(function() { var MainActivity = Java.use('com.nctf.simplelogin.MainActivity'); // 根据实际类名修改 // Hook checkSecutity MainActivity.checkSecutity.implementation = function() { console.log('Bypassed Security Check'); // 不执行原方法,相当于直接跳过 }; console.log("Hook...
轩辕杯(2025)
hook me(reverse)frida脚本 发现是单字节相关的异或 随便输入一些 Java.perform(function() { var main = Java.use("com.example.hookme.MainActivity"); main.rc4Encrypt.implementation=function (args){ console.log(args); console.log("----------"); var re=this.rc4Encrypt(args); console.log("result",re); }}); 先找密文 Java.perform(function() { var main = Java.use("com.example.hookme.MainActivity"); main.hexStringToByteArray.implementation=function...
2025移动安全产业积分赛
测试题拿到题目,要我们输入一个字符串 发现逻辑就是一个简单的异或 找到密文、 v="X<cP[?PHNB<P?aj"a=[]for i in range(len(v)): c=ord(v[i])^15 a.append(c)print(bytes(a))#b'W3l_T0_GAM3_0ne' GoodLuckmd5加密+混淆 调用oox00方法 之后观察发现就是一个手动实现md5加密,只不过加了很多混淆 偷天换日 调用本地check方法 这个base64是标准的,这个密文交叉引用可以发现是被初始化修改了 调用了java层的方法,what被变化的值可以得到,解密之后发现调用的方法只是getbytes 调用了大量java层的方法,应该还对传入的参数进行了变化,试过几个,感觉都是标准的API #include <stdio.h>int main(){ char str[100]; int flag; unsigned...
