首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
CTF对抗
发新帖
0
29
[原创]全国大学生软件安全攻防赛初赛wp
发表于: 2025-1-11 18:46
14363
[原创]全国大学生软件安全攻防赛初赛wp
螺丝兔
1
2025-1-11 18:46
14363
# 钓鱼邮件  base64一长串一看就不正常,大概是个文件,cybercgef解码下然后保存为文件。 010看了下  PK头,zip吧。。。 解压发现需要密码,找了个工具按纯数字试了下,爆出密码,不记得了,好几天前了。 总之解压出一个exe。 exe加壳,动调了一会,看规律大概是upx,于是直接esp大法dump。   字符串找了一会没有发现像ip端口的字符串,于是尝试wireshark抓包。 这里直接在主机运行了现在有点后怕。。。   # happylock 在java层看了一下,有控制流平坦化混淆(我不太清楚,看的很像那种native层加的ollvm混淆) 好像jeb可以写脚本去除,但是我还没有研究过,有时间再说叭。 字符串采取标准base64加密  不过稍微扫几眼还是能看出点东西的,大概加载了一个dex,里面应该有一些关键逻辑。  HOOK了一下dexloader函数发现加载的是check类,对这个类的cmp方法HOOK也是可以HOOK到的。  但是用frida-dump无法dump出有效的dex。 于是打算直接HOOK到的同时dump一下,这里直接让gpt写了一个脚本。 ```python Java.perform(function () { console.log("[*] Frida 脚本已加载,开始 Hook DexClassLoader 并尝试dump dex文件..."); try { // 获取 DexClassLoader 类 var DexClassLoader = Java.use("dalvik.system.DexClassLoader"); console.log("[+] 找到 dalvik.system.DexClassLoader 类"); // Hook DexClassLoader 的构造函数 DexClassLoader.$init.overload( 'java.lang.String', // dexPath 'java.lang.String', // optimizedDirectory 'java.lang.String', // libraryPath 'java.lang.ClassLoader'// parent ).implementation = function (dexPath, optimizedDirectory, libraryPath, parent) { console.log("[*] DexClassLoader 构造函数被调用 >>>"); console.log(" dexPath: " + dexPath); console.log(" optimizedDirectory: " + optimizedDirectory); console.log(" libraryPath: " + libraryPath); console.log(" parent: " + parent); // ========== 关键:尝试dump dex文件 ========== // 如果 dexPath 实际上在磁盘上存在,我们可以尝试复制它 // 注意:某些应用可能会瞬时删除或仅在内存中解密dex,这种情况下物理文件可能并不存在 dumpDexToExternal(dexPath); // 调用原始构造函数 return this.$init(dexPath, optimizedDirectory, libraryPath, parent); }; // Hook DexClassLoader 的 loadClass 方法(可选,用于观察加载的类) DexClassLoader.loadClass.overload('java.lang.String').implementation = function (className) { console.log("[*] DexClassLoader.loadClass 被调用,加载的类名: " + className); // 调用原始 loadClass 方法 var result = this.loadClass(className); // 可以在此处添加更多逻辑,如记录加载的类或执行其他操作 return result; }; console.log("[*] DexClassLoader 的构造函数和 loadClass 方法已成功 Hook"); } catch (err) { console.error("[-] Hook DexClassLoader 失败: " + err.message); } // 简单枚举以确认 DexClassLoader 是否已加载 Java.enumerateLoadedClasses({ onMatch: function(className) { if (className === "dalvik.system.DexClassLoader") { console.log("[+] dalvik.system.DexClassLoader 已加载"); } }, onComplete: function() { console.log("[*] 已完成类的枚举"); } }); // ========== 文件复制函数 ========== // ========== 文件复制函数,修正后的示例 ========== function dumpDexToExternal(dexPath) { if (!dexPath) { console.log("[-] dexPath为空,无法dump"); return; } var File = Java.use("java.io.File"); var FileInputStream = Java.use("java.io.FileInputStream"); var FileOutputStream = Java.use("java.io.FileOutputStream"); var Arrays = Java.use("java.util.Arrays"); try { var dexFile = File.$new(dexPath); if (!dexFile.exists()) { console.log("[-] 目标 dex 文件不存在: " + dexPath); return; } var fis = FileInputStream.$new(dexFile); // 目标输出目录,可自行修改 var outDirPath = "/sdcard/Download/dump_dex"; var outDir = File.$new(outDirPath); if (!outDir.exists()) { var created = outDir.mkdirs(); if (!created) { console.log("[-] 创建目录失败: " + outDirPath); fis.close(); return; } } var timestamp = Date.now(); var outDexPath = outDirPath + "/dump_" + timestamp + "_classes.dex"; console.log("[*] 准备将 dex 复制到: " + outDexPath); var outFile = File.$new(outDexPath); var fos = FileOutputStream.$new(outFile); var chunkSize = 4096; // 正确创建长度为 chunkSize 的 byte[] function newByteArray(size) { var tmp = []; for (var i = 0; i < size; i++) { tmp.push(0); } return Java.array('byte', tmp); } var buffer = newByteArray(chunkSize); var bytesRead = 0; while (true) { bytesRead = fis.read(buffer, 0, parseInt(chunkSize)); if (bytesRead <= 0) break; // EOF // 若 read 返回的大小小于 chunkSize,需要截断写入 if (bytesRead < chunkSize) { var actualData = Arrays.copyOf(buffer, bytesRead); fos.write(actualData, 0, parseInt(bytesRead)); } else { fos.write(buffer, 0, parseInt(bytesRead)); // chunkSize 也是 int } } fis.close(); fos.close(); console.log("[+] Dex 文件已成功复制到: " + outDexPath); } catch (e) { console.log("[-] dumpDexToExternal 异常: " + e.message); } } }); ``` 然后成功dump了下来  但是还是无法正常分析。  看到了native方法的字样,于是想着native层确实还没看,这里因为native层的字符串也有加密,我记得是有来着,所以我采取的是直接用frida_dump-master dump so。  哦,然后看完就知道它在干什么了,说来惭愧,确实这么久了还没看脱壳是一款我的问题。。 所以这里就稍微详细点说吧。 这里直接看JNI_ONLOAD函数。主要调用了三个函数,一个一个分析。  126A8虽然一开始看不出来在干什么,但是看到最后的字符串就明白了,这是shadowhook的初始化。  同时从这里得到的信息去查找shadowhook,明白这是一个关于inlinehook的项目。 <a href="elink@676K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6T1P5i4c8W2k6r3q4F1j5$3g2Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0V1K9h3&6D9K9h3&6W2i4K6u0V1K9r3!0G2K9#2)9J5c8X3u0D9L8$3u0Q4x3V1k6E0j5h3W2F1i4K6u0r3f1V1g2m8c8p5#2q4i4K6u0W2P5X3S2Q4x3X3c8o6e0W2)9J5k6h3#2V1"><mark class="encrypted">805K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6T1P5i4c8W2k6r3q4F1j5$3g2Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0V1K9h3&6D9K9h3&6W2i4K6u0V1K9r3!0G2K9#2)9J5c8X3u0D9L8$3u0Q4x3V1k6E0j5h3W2F1i4K6u0r3f1V1g2m8c8p5#2q4i4K6u0W2P5X3S2Q4x3X3c8o6e0W2)9J5k6h3#2V1</mark></a> ![]() 接着看第二个函数12300 看到这么简短的操作,以及函数的参数,大致能猜到这是一个HOOK的过程。  至于具体的操作,则是HOOK了libcso中的execve,这是一个创建新进程的函数。 而替换它的函数是根据判断是否是有dex2oat字符串来决定是否执行原来的execve函数。  接着往下看,最后一个函数sub_12324。  首先是调用了sub_1216C。  判断版本号返回不同字符串。   所以它返回的实际上应该是loadmethod这个方法。 然后在下一步再进行HOOK。  然后去搜索了一下对loadmethod进行HOOK的这个操作,明白了这是在实现函数抽取壳,也就是二代壳。 这里也明白了前面对execve HOOK的原因。  文章:<a href="elink@b3cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6G2L8X3g2B7j5h3&6W2i4K6u0W2k6$3W2@1K9s2g2T1i4K6u0W2K9h3!0Q4x3V1j5J5x3o6t1I4i4K6u0r3x3o6y4Q4x3V1j5J5y4g2)9J5c8W2)9J5y4f1f1#2i4K6t1#2z5p5q4Q4x3U0g2m8x3q4)9J5y4f1f1#2i4K6t1#2b7e0y4Q4x3U0g2n7x3#2)9J5y4f1f1@1i4K6t1#2b7U0S2Q4x3U0f1^5c8g2)9J5y4f1f1^5i4K6t1#2z5o6c8Q4x3U0g2n7x3g2)9J5y4f1f1#2i4K6t1#2b7e0y4Q4x3U0g2n7x3#2)9J5y4f1f1@1i4K6t1#2b7U0W2Q4x3U0f1^5b7W2)9J5y4f1f1@1i4K6t1#2b7V1q4Q4x3U0f1^5b7#2)9J5y4f1f1@1i4K6t1#2b7V1u0Q4x3U0g2m8x3#2)9J5y4f1f1#2i4K6t1#2b7e0y4Q4x3U0g2n7x3#2)9J5y4f1f1#2i4K6t1#2z5o6N6Q4x3U0g2n7c8q4)9J5y4f1f1$3i4K6t1#2z5e0g2Q4x3U0g2n7x3q4)9J5y4f1f1$3i4K6t1#2z5p5q4Q4x3U0g2n7c8q4)9J5y4f1f1#2i4K6t1#2z5p5k6Q4x3U0f1&6y4W2)9J5c8W2)9J5x3#2)9J5y4f1f1$3i4K6t1#2b7V1q4Q4x3U0f1&6x3q4)9J5y4f1f1%4i4K6t1#2b7e0m8Q4x3U0f1^5x3g2)9J5y4f1f1#2i4K6t1#2z5o6S2Q4x3U0f1^5y4W2)9J5y4f1f1$3i4K6t1#2z5f1g2Q4x3U0f1&6x3l9`.`."><mark class="encrypted">7d5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6G2L8X3g2B7j5h3&6W2i4K6u0W2k6$3W2@1K9s2g2T1i4K6u0W2K9h3!0Q4x3V1j5J5x3o6t1I4i4K6u0r3x3o6y4Q4x3V1j5J5y4g2)9J5c8W2)9J5y4f1f1#2i4K6t1#2z5p5q4Q4x3U0g2m8x3q4)9J5y4f1f1#2i4K6t1#2b7e0y4Q4x3U0g2n7x3#2)9J5y4f1f1@1i4K6t1#2b7U0S2Q4x3U0f1^5c8g2)9J5y4f1f1^5i4K6t1#2z5o6c8Q4x3U0g2n7x3g2)9J5y4f1f1#2i4K6t1#2b7e0y4Q4x3U0g2n7x3#2)9J5y4f1f1@1i4K6t1#2b7U0W2Q4x3U0f1^5b7W2)9J5y4f1f1@1i4K6t1#2b7V1q4Q4x3U0f1^5b7#2)9J5y4f1f1@1i4K6t1#2b7V1u0Q4x3U0g2m8x3#2)9J5y4f1f1#2i4K6t1#2b7e0y4Q4x3U0g2n7x3#2)9J5y4f1f1#2i4K6t1#2z5o6N6Q4x3U0g2n7c8q4)9J5y4f1f1$3i4K6t1#2z5e0g2Q4x3U0g2n7x3q4)9J5y4f1f1$3i4K6t1#2z5p5q4Q4x3U0g2n7c8q4)9J5y4f1f1#2i4K6t1#2z5p5k6Q4x3U0f1&6y4W2)9J5c8W2)9J5x3#2)9J5y4f1f1$3i4K6t1#2b7V1q4Q4x3U0f1&6x3q4)9J5y4f1f1%4i4K6t1#2b7e0m8Q4x3U0f1^5x3g2)9J5y4f1f1#2i4K6t1#2z5o6S2Q4x3U0f1^5y4W2)9J5y4f1f1$3i4K6t1#2z5f1g2Q4x3U0f1&6x3l9`.`.</mark></a> 再看下替换成的函数。  唔,这里看到memcpy再结合函数抽取壳的思想就突然明白它在干什么了,它在把字节填充回去。 用010看一下之前dump的dex。  发现果然有一连串0,然后长度就是152. 所以填充回去即可。 以及下面的12345678也替换为Crackme!  实际的比较函数。 解出flag。已经是赛后了,不清楚对不对。  # donntyousee 分析代码逻辑,多次调试大致明白他的思路,有一个结构部分收录了要用到的函数,然后再从中取来调用,完成rc4的加密和比较。  最终比较的密文 很多函数都加了花指令,nop即可,范围的判断是push rax到pop rax。  两个比较关键的函数,上面那个是密钥的S盒生成,byte数组就是key,14位。  然后对byte交叉引用的时候发现有第二个调用的地方,猜测是反调试,于是只取静态下的值。  然后大概有点异或之类的魔改,看了下主要的加密逻辑,  最后加密的那一句有一个异或0x23. 解密脚本: ```python #include<stdio.h> #include<stdbool.h> #include<stdlib.h> #include <sys/stat.h> #include<Windows.h> /* RC4初始化函数 */ void rc4_init(unsigned char* s, unsigned char* key, unsigned long Len_k) { unsigned 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_k]; } for (i = 0; i < 256; i++) { j = (j + s[i] + k[i]) % 256; tmp = s[i]; s[i] = s[j]; s[j] = tmp; } } /* RC4加解密函数 unsigned char* Data 加解密的数据 unsigned long Len_D 加解密数据的长度 unsigned char* key 密钥 unsigned long Len_k 密钥长度 */ 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); int i = 0, j = 0, t = 0; unsigned long k = 0; unsigned char tmp; for (k = 0; k < Len_D; k++) { i = (i + 1) % 256; j = (j + s[i]) % 256; tmp = s[i]; s[i] = s[j]; s[j] = tmp; t = (s[i] + s[j]) % 256; Data[k] = Data[k] ^ s[t]^0x23; } } int main() { //加解密字符串用 unsigned char key[] = { 0x92, 0x1C, 0x2B, 0x1F, 0xBA, 0xFB, 0xA2, 0xFF, 0x07, 0x69, 0x7D, 0x77, 0x18, 0x8C }; unsigned long key_len =14; //数组密钥 //unsigned char key[] = {}; //unsigned long key_len = sizeof(key); //加解密数据 __int64 v4[4] = { 5 }; v4[0] = 0xC632A2F05BD9371D; v4[1] = 0x3AA73E7E508CA730; v4[2] = 0x1C6B85816B58C0BA; v4[3] = 0x9742C18A7C80F54C; unsigned char data[] = { 0x25, 0xCD, 0x54, 0xAF, 0x51, 0x1C, 0x58, 0xD3, 0xA8, 0x4B, 0x4F, 0x56, 0xEC, 0x83, 0x5D, 0xD4, 0xF6, 0x47, 0x4A, 0x6F, 0xE0, 0x73, 0xB0, 0xA5, 0xA8, 0xC3, 0x17, 0x81, 0x5E, 0x2B, 0xF4, 0xF6, 0x71, 0xEA, 0x2F, 0xFF, 0xA8, 0x63, 0x99, 0x57 }; int data2[] = { 0xd,0x6,0x1c,0x1f,0x54,0x56,0x53,0x57,0x51,0x0,0x3,0x1d,0x14,0x58,0x56,0x3,0x19,0x1c,0x0,0x54,0x3,0x4b,0x14,0x58,0x7,0x2,0x49,0x4c,0x2,0x7,0x1,0x51,0xc,0x8,0x0,0x1,0x0,0x3,0x0,0x4f,0x7d }; unsigned char* data1 = 0;//flag{Wel //加解密 data1 = (unsigned char*)v4; rc4_crypt(data, sizeof(data), key, key_len); printf("%s", data); return; //************************************************** //加解密文件 //unsigned char key[] = "6105t3";//密钥 //unsigned int key_len = 6; //FILE* fp = fopen("License.dat", "rb");//读取文件内容,文件要放到目录下 //if (fp != NULL) // printf("读取成功"); //fseek(fp, 0, SEEK_END); //int last = ftell(fp); //int size = last; //fseek(fp, 0, SEEK_SET); //PBYTE pBuf = (PBYTE)malloc(size); //fread(pBuf, size, 1, fp); //rc4_crypt(pBuf, size, key, key_len);//文件解密或加密,对称性,加密即解密 //fp = fopen("LIC.dat", "wb"); //if (fp == NULL) // printf("创建失败"); //fwrite(pBuf, size, 1, fp);//重新写回去 //fclose(fp); //fclose(fp); //free(pBuf); } //之前不知道为什仫一直有问题,但是现在好了,可能是大小之前搞错了。 ``` 得出flag:  都不是很难的题叭,附件超大小了,放云盘了,师傅们感兴趣的可以自己试试水。 其实这个发看雪感觉有点水。。但是我自己也太懒了没搭博客所以就发这里叭呜呜。 通过网盘分享的文件:软件安全攻防赛.zip 链接: <mark class="encrypted">30fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6H3j5h3&6Q4x3X3g2T1j5h3W2V1N6g2)9J5k6h3y4G2L8g2)9J5c8Y4y4Q4x3V1j5I4y4e0b7@1h3i4g2V1M7Y4t1#2f1K6N6o6y4r3N6S2f1s2N6D9P5g2W2G2b7g2)9K6c8Y4m8%4k6q4)9K6c8s2u0W2j5e0p5`.</mark> 提取码: rea1 --来自百度网盘超级会员v4的分享
回复或点赞可查看完整内容
传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!!
最后于
2025-1-11 19:27 被螺丝兔编辑 ,原因:
#Reverse
收藏
・
0
点赞
・
29
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
git_99440qimingminimax
为你点赞!
2天前
mb_lthgjpwj
为你点赞!
2026-8-21 09:48
mb_ywyejwnk
期待更多优质内容的分享,论坛有你更精彩!
2026-7-24 09:25
wx_晨梦
感谢你分享这么好的资源!
2026-7-16 08:32
n00bzx
感谢你的贡献,论坛因你而更加精彩!
2026-4-20 07:33
mb_faxpnhvh
非常支持你的观点!
2026-3-18 11:44
mb_qypzxurg
为你点赞!
2026-3-12 18:26
mb_ersnlrtn
+2
谢谢你的细致分析,受益匪浅!
2026-3-10 19:47
l1pmoluy
你的帖子非常有用,感谢分享!
2026-3-9 21:06
SsCcXxSs
感谢你分享这么好的资源!
2026-2-1 15:44
mick0960
为你点赞!
2026-1-28 17:27
sillage
期待更多优质内容的分享,论坛有你更精彩!
2025-12-9 11:04
zzzhangyu
期待更多优质内容的分享,论坛有你更精彩!
2025-12-3 10:50
CuratorJin
谢谢你的细致分析,受益匪浅!
2025-6-25 01:15
慕雪岑
期待更多优质内容的分享,论坛有你更精彩!
2025-6-12 21:28
git_51604CZ-rfoc
感谢你的积极参与,期待更多精彩内容!
2025-5-27 07:41
小秃秃驴
你的帖子非常有用,感谢分享!
2025-4-25 12:09
Fallr4in
感谢你分享这么好的资源!
2025-4-21 10:17
老小白
为你点赞!
2025-3-21 14:44
mb_aicedybu
感谢你的贡献,论坛因你而更加精彩!
2025-3-18 18:28
风吹蝶
感谢你分享这么好的资源!
2025-3-16 20:37
龙loong
这个讨论对我很有帮助,谢谢!
2025-3-10 11:33
mb_vhlldpfh
感谢你的贡献,论坛因你而更加精彩!
2025-3-8 19:36
npc0vo
谢谢你的细致分析,受益匪浅!
2025-3-6 10:46
xianyuuuan
+4
这个讨论对我很有帮助,谢谢!
2025-2-13 00:49
SomeMx
+1
感谢你的贡献,论坛因你而更加精彩!
2025-2-3 21:37
R00TK17
非常支持你的观点!
2025-1-27 13:41
风兮木晓
期待更多优质内容的分享,论坛有你更精彩!
2025-1-12 16:14
huangyalei
你的帖子非常有用,感谢分享!
2025-1-12 00:56
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
13
)
cccaaa123
雪 币:
1017
活跃值:
(623)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
39
粉丝
1
关注
私信
cccaaa123
2
楼
学习一下
2025-4-4 22:06
0
peterchen
雪 币:
335
活跃值:
(761)
能力值:
( LV2,RANK:10 )
在线值:
发帖
43
回帖
211
粉丝
1
关注
私信
peterchen
3
楼
多谢楼主分享技术!
2025-4-7 19:38
0
iami233
雪 币:
214
活跃值:
(47)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
1
粉丝
0
关注
私信
iami233
4
楼
多谢楼主!
2025-4-8 20:50
0
SsCcXxSs
雪 币:
20
能力值:
( LV1,RANK:0 )
在线值:
发帖
0
回帖
1
粉丝
0
关注
私信
SsCcXxSs
5
楼
goood
2026-2-1 15:45
0
mb_akpsshsc
雪 币:
4
能力值:
( LV1,RANK:0 )
在线值:
发帖
0
回帖
1
粉丝
0
关注
私信
mb_akpsshsc
6
楼
2026-3-5 19:14
0
mb_oysbcaej
雪 币:
0
能力值:
( LV1,RANK:0 )
在线值:
发帖
0
回帖
25
粉丝
0
关注
私信
mb_oysbcaej
7
楼
666
2026-3-7 23:33
0
LLY烨
雪 币:
227
能力值:
( LV1,RANK:0 )
在线值:
发帖
0
回帖
5
粉丝
0
关注
私信
LLY烨
8
楼
很强
2026-3-9 18:31
0
Hades一KXXY
雪 币:
4837
活跃值:
(2460)
能力值:
( LV2,RANK:10 )
在线值:
发帖
2
回帖
99
粉丝
2
关注
私信
Hades一KXXY
9
楼
2026-3-9 19:29
0
mb_juhujqjl
雪 币:
0
能力值:
( LV1,RANK:0 )
在线值:
发帖
0
回帖
1
粉丝
0
关注
私信
mb_juhujqjl
10
楼
2026-3-12 19:01
0
mb_jgflqcmi
雪 币:
200
能力值:
( LV1,RANK:0 )
在线值:
发帖
0
回帖
1
粉丝
0
关注
私信
mb_jgflqcmi
11
楼
谢谢你的细致分析,受益匪浅!
2026-3-12 20:09
0
mb_gixpbmft
雪 币:
能力值:
( LV1,RANK:0 )
在线值:
发帖
0
回帖
1
粉丝
0
关注
私信
mb_gixpbmft
12
楼
点赞
2026-3-12 22:19
0
mb_irrqcmsq
雪 币:
280
能力值:
( LV1,RANK:0 )
在线值:
发帖
0
回帖
60
粉丝
0
关注
私信
mb_irrqcmsq
13
楼
谢谢,太厉害了
2026-5-28 10:56
0
mb_ojefmjee
雪 币:
319
能力值:
( LV1,RANK:0 )
在线值:
发帖
0
回帖
1
粉丝
0
关注
私信
mb_ojefmjee
14
楼
真厉害
2026-7-29 16:17
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
螺丝兔
1
9
发帖
18
回帖
80
RANK
关注
私信
他的文章
模块解决pixel7的32位兼容问题
1467
安卓壳学习记录
19433
[求助]fridaHOOK的寄存器值与IDA调试时不同
1057
[原创]全国大学生软件安全攻防赛初赛wp
14363
[原创]zygisk改机模块demo
12505
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部