WWW.YOUINFO.SITE
标签聚合 样本

/tag/样本

LinuxDo 最新话题 · 2026-06-01 16:44:22+08:00 · tech

0x0 样本: play.google.com Lost Sword - Google Play 上的应用 波涛胸涌&华丽冒险传说!好胸的冒... Free 正主: largosoft.co.kr 라르고소프트|LARGOSOFT 라르고소프트는 게임 보안 솔루션 개발에 특화된 기업으로, 게임 환경에서 발생하는 다양한 보안 위협을 효과적으로 방어하는 기술을 제공합니다. 非常非常简单的反作弊,很适合新手入门,完全没任何难度 0x1 整体流程 base.apk 里面的 Dalvik字节码 拉起 libATG_D.so libATG_D.so 解密 e8Hk2vi4CH 为正常的 Dalvik字节码,然后注入进去,后续执行的是注入进去的 Dalvik字节码 解密后的 e8Hk2vi4CH Dalvik字节码 拉起正常的Unity进程,同时拉起 libATG_L.so libATG_L.so 根据架构解密拉起 ATG_E 来进行环境检测,日志上报等等 0x2 libATG_D.so com/bishopsoft/Presto/SDK/Loader.java 载入 libATG_D.so public class Loader extends Application // class@00018b from classes.dex { private String mAppName; private Application mDelegate; private boolean mIsBindReal; private static ByteBuffer[] Buffers; private static Context mContext; static { System.loadLibrary("ATG_D"); } System.loadLibrary 会调用 libATG_D.so 的 JNI_OnLoad ,随后调用 JNI_OnLoad.54 JNI_OnLoad.54 开头有些垃圾代码狙击IDA的反编译 缓存运行环境信息 找到 Java 类 注册两个 native 方法 Loader.InitBuffer signature: (Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Landroid/content/res/AssetManager;)Ljava/lang/Object; native: 0x79004 -> real body 0x75660 Loader.native_InitLib signature: (Landroid/content/Context;Landroid/content/res/AssetManager;Z)I native: 0x77594 -> real body 0x740f8 JNI_OnLoad 返回到 Java,调用 InitBuffer 解密 Dalvik字节码 public native Object InitBuffer(Context p0,String p1,String p2,AssetManager p3); public void attachBaseContext(Context paramContext){ try{ super.attachBaseContext(paramContext); AssetManager assets = paramContext.getAssets(); this.native_InitLib(paramContext, assets, false); Loader.Buffers = this.InitBuffer(paramContext, paramContext.getApplicationInfo().dataDir, paramContext.getApplicationInfo().nativeLibraryDir, assets); if (Loader.Buffers != null) { this.loadDex(paramContext); } }catch(java.lang.NoSuchFieldException e1){ e1.printStackTrace(); }catch(java.lang.IllegalAccessException e1){ e1.printStackTrace(); }catch(java.lang.NoSuchMethodException e1){ e1.printStackTrace(); }catch(java.lang.reflect.InvocationTargetException e1){ e1.printStackTrace(); } return; } 开头依旧狙击IDA反编译 取 e8Hk2vi4CH 的路径 派生密钥 用派生出来的密钥跑AES解密 e8Hk2vi4CH 扫描 embedded Dalvik字节码 生成 + 返回 解密后的buffer 0x3 libATG_L.so java/stage2/code/com/bishopsoft/Presto/SDK/Presto.java 载入 libATG_L.so public class Presto extends Application // class@0000ff from classes2.dex { private static String EGdataPath; public static String SDK_version = "2025091801"; static CallBackReLogin callback; private static int checked_emul = 0; private static Context mContext; public static String packageList = ""; private static Presto presto; public static String rootPath = ""; private static String sData = ""; static boolean scanning = true; static { Presto.presto = new Presto(); System.loadLibrary("ATG_L"); } 开头依旧狙击IDA反编译 依旧注册函数查询CPU架构 fork/ptrace 保护+反调试 JNI_OnLoad 返回到 Java 开始 init,最终调用 WorkThread public void Presto_Init(Context context){ Presto.mContext = context; Presto.scanning = true; if (Presto.EGdataPath == null) { Presto.EGdataPath = Utils.getCPUABI(Presto.mContext); } Presto.rootPath = Utils.execByRuntime("pm path "+Presto.mContext.getPackageName()); if (Presto.rootPath != null && !Presto.rootPath.isEmpty()) { Presto.rootPath = Presto.rootPath.replace("package:", ""); } Presto.packageList = Utils.execByRuntime("pm list package"); if (Presto.packageList != null && !Presto.packageList.isEmpty()) { Presto.packageList = Presto.packageList.replaceAll("\npackage:", ","); } Log.i("Presto", "SDK_Ver = "+Presto.SDK_version); Integer[] integerArray = new Integer[0]; new ThreadScan(Presto.mContext, 0).execute(integerArray); return; } public class ThreadScan extends AsyncTask // class@000102 from classes2.dex { private Context mContext; private int option; private String result; public static String ResultScan = ""; static { } public void ThreadScan(Context context,int _option){ super(); this.mContext = context; this.option = _option; } protected Object doInBackground(Object[] p0){ return this.doInBackground(p0); } protected String doInBackground(Integer[] arg0){ int recovery = 1; this.result = Presto.WorkThread(this.mContext, recovery); return this.result; } } 根据CPU架构选择模块 CpuFamily = android_getCpuFamily(); if ( CpuFamily == ANDROID_CPU_FAMILY_X86_64 ) { strcpy(&filename[strlen(filename)], "/ATG_E_x86_64.sec"); } else { if ( CpuFamily == ANDROID_CPU_FAMILY_ARM64 ) { v25 = strlen(filename); v26 = "/ATG_E_x64.sec"; } else { if ( CpuFamily != ANDROID_CPU_FAMILY_X86 ) { strcpy(&filename[strlen(filename)], "/ATG_E.sec"); goto LABEL_64; } v25 = strlen(filename); v26 = "/ATG_E_x86.sec"; } v27 = &filename[v25]; v28 = *v26; v29 = *(v26 + 7); *v27 = v28; *(v27 + 7) = v29; } 解出临时 ._ATG_B.sec strcpy(file, g_dataPath); qmemcpy(v206, "FF8F2A6CDD9B3DB72CD301FB87035E34", sizeof(v206)); strcpy(szHex, "2CD301FB87035E34FF8F2A6CDD9B3DB7"); v30 = strlen(szHex); v31 = v30; if ( v30 >= 1 && (v30 & 0xF) == 0 && v30 >= 2 ) { v32 = v30 >> 1; v33 = operator new(v32); memset(v33, 0, v31 >> 1); v34 = 0; v35 = szHex; v36 = v33; while ( Hex2Char(v35, &s) ) { v37 = 0xFFFFFFFE - v34 - (~v34 | 0xFFFFFFFE); v35 += 2; v34 = (v37 ^ (v34 + 1)) + (v34 | 1) + 2 * (v37 & (v34 + 1)); *v36++ = s.erk[0]; if ( v34 >= v32 ) { v38 = operator new(v31 >> 1); memset(v38, 0, v31 >> 1); *name = WzrBpTHKGekFnEGBsJVCCbpW(char *,int)::iv_key; aes_set_key(&s, "e38d99fb4434d3d485794c6b34cd5d1fB3B4801D0A7AC103B2BC08C10BC017E6", 0x100); v39 = 0; do { v40 = &v33[v39]; aes_decrypt(&s, v40, &v38[v39]); v41 = 0; do { v42 = name[v41]; v43 = ((v41 + v39) ^ -(v41 | v39)) + (v41 | v39) + 2 * ((v41 + v39) & -(v41 | v39)); v44 = v38[v43]; v45 = v44 | v42; v46 = -(((v44 + v42) ^ -v45) + 2 * ((v44 + v42) & -v45)); v47 = 0xFFFFFFFE - v41 - (~v41 | 0xFFFFFFFE); v41 = (v47 ^ (v41 + 1)) + (v41 | 1) + 2 * (v47 & (v41 + 1)); v38[v43] = (v46 ^ v45) + 2 * (v46 & v45); } while ( v41 < 0x10 ); v39 = (v39 | 0x10) + ~v39 + (v39 | 1) + (v39 & 1) + ((0xFFFFFFEF - v39 - (~v39 | 0xFFFFFFEF)) ^ (v39 + 0x10)) + 2 * ((0xFFFFFFEF - v39 - (~v39 | 0xFFFFFFEF)) & (v39 + 0x10)); *name = *v40; } while ( v39 < v32 ); memset(&szHex[v32], 0, v31 - v32); memcpy(szHex, v38, v31 >> 1); memset(v33, 0, v31 >> 1); operator delete(v38); break; } } operator delete(v33); } strcat(file, szHex); v48 = fopen(filename, "rb"); v49 = fopen(file, "wb"); if ( v48 ) { v50 = v49; fseek(v48, 0xFFFFFFFFFFFFFFFCLL, 2); v51 = ftell(v48); fread(&ptr, 1u, 8u, v48); v52 = ptr; v53 = v51 - v52 + ((v52 - 1) | ~v51); v54 = ((v53 + 1) ^ (v52 - v51 + (v51 | -v52))) + 2 * (((v53 + 1) & (v52 - v51 + (v51 | -v52))) + (v53 ^ ~(v51 - ptr)) + 2 * ((v51 - ptr) & ~v53)); v55 = calloc(v54, 1u); v56 = calloc(v51, 1u); if ( v55 ) { v57 = v56; if ( v56 ) { fseek(v48, 0, 0); fread(v57, 1u, v51, v48); fseek(v48, v52, 0); fread(v55, 1u, v54, v48); fclose(v48); if ( v54 >= 1 ) { v58 = 0; for ( i = 0; i < v54; v58 = i ) { v60 = v55[v58]; v61 = v57[v58]; v62 = v61 | v60; v63 = -(((v61 + v60) ^ -v62) + 2 * ((v61 + v60) & -v62)); v64 = 0xFFFFFFFE - i - (~i | 0xFFFFFFFE); i = (v64 ^ (i + 1)) + (i | 1) + 2 * (v64 & (i + 1)); v55[v58] = (v63 ^ v62) + 2 * (v63 & v62); } } fwrite(v55, 1u, v54, v50); fclose(v50); free(v55); free(v57); } } } 完整性检查 v277 = 0; v276 = 0u; v275 = 0u; v274 = 0u; v273 = 0u; v272 = 0u; v271 = 0u; v270 = 0u; v269 = 0u; v268 = 0u; v267 = 0u; v266 = 0u; v265 = 0u; v264 = 0u; v263 = 0u; *v262 = 0u; *filename = 0u; memcpy(name, "B3B4801D0A7AC103B2BC08C10BC017E6", 0x104u); strcpy(file, g_dataPath); szHex[0x20] = 0; memset(v243, 0, sizeof(v243)); v242 = 0u; v241 = 0u; v240 = 0u; v239 = 0u; v238 = 0u; v237 = 0u; v236 = 0u; v235 = 0u; v234 = 0u; v233 = 0u; v232 = 0u; v231 = 0u; v230 = 0u; *szHex = v206[1]; *&szHex[0x10] = v206[0]; v65 = strlen(szHex); v66 = v65; v67 = v209; if ( v65 >= 1 && (v65 & 0xF) == 0 && v65 >= 2 ) { v68 = v65 >> 1; v69 = operator new(v68); memset(v69, 0, v66 >> 1); v70 = 0; v71 = szHex; v72 = v69; while ( Hex2Char(v71, &s) ) { v73 = 0xFFFFFFFE - v70 - (~v70 | 0xFFFFFFFE); v71 += 2; v70 = (v73 ^ (v70 + 1)) + (v70 | 1) + 2 * (v73 & (v70 + 1)); *v72++ = s.erk[0]; if ( v70 >= v68 ) { v74 = operator new(v66 >> 1); memset(v74, 0, v66 >> 1); ptr = WzrBpTHKGekFnEGBsJVCCbpW(char *,int)::iv_key; aes_set_key(&s, "e38d99fb4434d3d485794c6b34cd5d1fB3B4801D0A7AC103B2BC08C10BC017E6", 0x100); v75 = 0; do { v76 = &v69[v75]; aes_decrypt(&s, v76, &v74[v75]); v77 = 0; do { v78 = *(&ptr + v77); v79 = ((v77 + v75) ^ -(v77 | v75)) + (v77 | v75) + 2 * ((v77 + v75) & -(v77 | v75)); v80 = v74[v79]; v81 = v80 | v78; v82 = -(((v80 + v78) ^ -v81) + 2 * ((v80 + v78) & -v81)); v83 = 0xFFFFFFFE - v77 - (~v77 | 0xFFFFFFFE); v77 = (v83 ^ (v77 + 1)) + (v77 | 1) + 2 * (v83 & (v77 + 1)); v74[v79] = (v82 ^ v81) + 2 * (v82 & v81); } while ( v77 < 0x10 ); v75 = (v75 | 0x10) + ~v75 + (v75 | 1) + (v75 & 1) + ((0xFFFFFFEF - v75 - (~v75 | 0xFFFFFFEF)) ^ (v75 + 0x10)) + 2 * ((0xFFFFFFEF - v75 - (~v75 | 0xFFFFFFEF)) & (v75 + 0x10)); ptr = *v76; } while ( v75 < v68 ); memset(&szHex[v68], 0, v66 - v68); memcpy(szHex, v74, v66 >> 1); memset(v69, 0, v66 >> 1); operator delete(v74); break; } } operator delete(v69); } strcat(file, szHex); v84 = dlopen(file, 1); v85 = obja; if ( v84 ) { v86 = v84; v87 = strlen(name); v88 = v87; if ( v87 >= 1 && (v87 & 0xF) == 0 && v87 >= 2 ) { v89 = v87 >> 1; v90 = operator new(v89); memset(v90, 0, v88 >> 1); v91 = 0; v92 = name; v93 = v90; while ( Hex2Char(v92, &s) ) { v94 = 0xFFFFFFFE - v91 - (~v91 | 0xFFFFFFFE); v92 += 2; v91 = (v94 ^ (v91 + 1)) + (v91 | 1) + 2 * (v94 & (v91 + 1)); *v93++ = s.erk[0]; if ( v91 >= v89 ) { v95 = operator new(v88 >> 1); memset(v95, 0, v88 >> 1); ptr = WzrBpTHKGekFnEGBsJVCCbpW(char *,int)::iv_key; aes_set_key(&s, "e38d99fb4434d3d485794c6b34cd5d1fB3B4801D0A7AC103B2BC08C10BC017E6", 0x100); v96 = 0; do { v97 = &v90[v96]; aes_decrypt(&s, v97, &v95[v96]); v98 = 0; do { v99 = *(&ptr + v98); v100 = ((v98 + v96) ^ -(v98 | v96)) + (v98 | v96) + 2 * ((v98 + v96) & -(v98 | v96)); v101 = v95[v100]; v102 = v101 | v99; v103 = -(((v101 + v99) ^ -v102) + 2 * ((v101 + v99) & -v102)); v104 = 0xFFFFFFFE - v98 - (~v98 | 0xFFFFFFFE); v98 = (v104 ^ (v98 + 1)) + (v98 | 1) + 2 * (v104 & (v98 + 1)); v95[v100] = (v103 ^ v102) + 2 * (v103 & v102); } while ( v98 < 0x10 ); v96 = (v96 | 0x10) + ~v96 + (v96 | 1) + (v96 & 1) + ((0xFFFFFFEF - v96 - (~v96 | 0xFFFFFFEF)) ^ (v96 + 0x10)) + 2 * ((0xFFFFFFEF - v96 - (~v96 | 0xFFFFFFEF)) & (v96 + 0x10)); ptr = *v97; } while ( v96 < v89 ); memset(&name[v89], 0, v88 - v89); memcpy(name, v95, v88 >> 1); memset(v90, 0, v88 >> 1); operator delete(v95); v67 = v209; break; } } operator delete(v90); v85 = obja; } 启动模块 LABEL_249: g_result[0] = 0; memset(&s, 0, 0x104); if ( p_result ) { free(p_result); p_result = nullptr; } strcpy(&s, g_dataPath); *(s.erk + strlen(&s)) = 0x2F; if ( family == ANDROID_CPU_FAMILY_X86_64 ) { strcpy(&s + strlen(&s), "ATG_E_x86_64.sec"); } else { if ( family == ANDROID_CPU_FAMILY_ARM64 ) { v152 = strlen(&s); v153 = "ATG_E_x64.sec"; } else { if ( family != ANDROID_CPU_FAMILY_X86 ) { strcpy(&s + strlen(&s), "ATG_E.sec"); goto LABEL_259; } v152 = strlen(&s); v153 = "ATG_E_x86.sec"; } v154 = (s.erk + v152); v155 = *v153; v156 = *(v153 + 6); *v154 = v155; *(v154 + 6) = v156; } LABEL_259: if ( g_Ehandle || (g_Ehandle = dlopen(&s, 1)) != nullptr ) { unlink(&s); if ( g_isScanning ) return v67->functions->NewStringUTF(v67, g_result); v157 = dlsym(g_Ehandle, "WorkThread"); if ( v157 ) { g_isScanning = 1; m_infect_cnt = v157(v67, v85, m_option); if ( (m_infect_cnt & 0x80000000) == 0 ) return v67->functions->NewStringUTF(v67, g_result); memset(&s, 0, 0x104); v158 = operator new(0xF0u); v262[0] = v158; 虚拟机检测(非常全的特征,可以抄过来用 ) Build.BRAND == “generic” Build.BRAND == “sdk” Build.BRAND == “Microvirt” Build.BRAND == “AMIDuOS” Build.BRAND == “TTVM” Build.MODEL == “AMIDuOS” Build.MODEL == “Memu” Build.MODEL == “TiantianVM” Build.MODEL == “Droid4X” Build.MODEL == “vmos” Build.HARDWARE == “andy” Build.HARDWARE == “vbox86” Build.HARDWARE == “nox” Build.HARDWARE == “windroye” Build.HARDWARE == “goldfish” Build.HARDWARE == “ttVM_x86” Build.HARDWARE == “android_x86” Build.HARDWARE == “android_x86_64” Build.BOOTLOADER == “nox” 文件存在 /system/bin/droid4x 文件存在 /system/bin/droid4x-prop 文件存在 /system/bin/androVM-prop 文件存在 /system/bin/androVM-vbox-sf 文件存在 /fstab.intel 文件存在 /fstab.vbox86 文件存在 /fstab.vbox64 文件存在 /fstab.android_x86 文件存在 /fstab.android_x86_64 文件存在 /system/app/EmuCoreService/EmuCoreService.apk 文件存在 /system/app/EmuInputService/EmuInputService.apk 文件存在 /system/app/gpLogin/gpLogin.apk 文件存在 /system/app/gpLogin/gpLogin_new.apk 文件存在 /system/app/Helper/helper.apk 文件存在 /system/app/Helper/NoxHelp_en.apk 文件存在 /system/app/Helper/NoxHelp_en_new.apk 文件存在 /bin/nox-vbox-sf 文件存在 /bin/noxd 文件存在 /data/app/com.android.ld.appstore-1/base.apk 文件存在 /data/app/com.android.ld.appstore-2/base.apk 文件存在 /system/app/Launcher3/Launcher3.apk 文件存在 /system/priv-app/LDAppStore/LDAppStore.apk 文件存在 /data/user_de/0/com.android.flysilkworm 文件存在 /data/misc/profiles/ref/com.android.flysilkworm 目录可打开 /mnt/windows/BstSharedFolder 文件存在 system/app/IME/IME.apk 上一条 APK 的包名等于 com.microvirt.memuime 文件存在 /system/app/MuMuAudio/MuMuAudio.apk 文件存在 /system/app/com.mumu.store/com.mumu.store.apk 文件存在 /system/priv-app/MuMuAudio/MuMuAudio.apk 文件存在 /system/priv-app/com.mumu.store_overseas/com.mumu.store_overseas.apk 文件存在 /system/app/KiwiIntentSink/KiwiIntentSink.apk 0x3 libATG_E.so WorkThread 入口塞了一坨特征码 然后启动了两个线程 iCEcaaLIRKlGfNDwLLDLVlwO 还是做虚拟机检测,增加了下面的特征: com.gspace.android com.excean.gspace com.excean.splay com.excean.parallelspace io.va.exposed parallel.space com.ludashi.dualspace com.ludashi.superboost com.app.hider.master.dual.app com.app.hider.master.pro com.hidespps.apphider com.app.calculator.vault.hider com.excelliance.multiaccount multi.parallel.dualspace.cloner do.multiple.cloner com.lulu.luluboxpro com.cloneapp.parallelspace.dualspace com.pan.parallelspace com.dualspace.multispace.android com.pengyou.cloneapp 做crc32校验 初始化 libData.so ,解出来是作弊工具的名称 AlphaGameBooster CheatEngine Freedom Freedom Freedom Freedom Freedom Freedom Freedom Freedom Freedom GameCheater GameCheater GameCIH GameGuardian GameGuardian GameGuardian GameGuardian GameGuardian GameGuardian GameHackerSpeed GameHackerSpeed GameHacker GameHacker GameHacker GameHacker GameHacker GameHacker GameHacker GameKiller GameKiller GameKiller GameKiller GameKiller GameKiller GameMaster2 GameMaster2 GameMaster GameMaster_opda GameMaster_opda GameMaster_opda GameMaster_opda GGAssistant HoistMan HoistMan HoistMan HoistMan Huang Huang Huang Huang igamecool igamecool LuckyPatcher MemSpector MemSpector MuzhiwanGamehelper MuzhiwanGamehelper PacketSniffer PacketSniffer RootCloakPlus RootCloakPlus RootCloak RootCloak RootCloak RootCloak SlashGameBuster SlashGameBuster SlashGameBuster TcgameGamecheater Touch18 Touch18 WoodPecker Xiaojianjian Xiaojianjian xxAssistant xxAssistant xxAssistant xxAssistant Youxia Youxia Zhangkongapp Zhangkongapp Zhangkongapp Zhangkongapp SHBUoTIkyKmlbYGMbbWeIYeB 只负责轮询配置 0x4 global-metadata.dat 读进内存变换一下文件头,做一下xor完事 0xF 反作弊力度和LIAPP坐一桌,CrackProof比这玩意稍强 libunity.so 和 libil2cpp.so 不加壳,没有云下发,甚至安全模块包含完整的DWARF 2 个帖子 - 2 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-06-01 16:12:25+08:00 · tech

本来想用焚诀的,但是怕样本数不够,还是用秘诀吧。 秘诀 参考了各位佬友的经验贴并自己亲自验证通过后,总结成经验分享给佬友。核心就是一句话: 必须是 本学年 的文件 浓眉大眼 的哈基米能有什么坏心眼呢?他在邮件中已经明确告诉你要求了。我没有提全名和学校名,因为大家作假时这俩一般不会错。 上传资料为什么无效 很多佬友提交多次资料都失败,大都是因为不符合此要求。下面举例,请大家对号入座。 学生证的入学学年不是2025/2026。只有这个入学年才能确保你现在还在就读。 上传的Student ID无法证明你还在就读。谷歌要求上传有过期日志的Student ID,我用了NUS的Student ID,但是上面没有过期日期,因此无效。 其他同理,比如学费单、课程表等,如果学年不对,依然不符合要求。 关键点 解答佬友常见问题如下: 谷歌没想针对你,只是针对哪些懒得二验的人 不用管之前是怎么认证的,跟二验无关 过了认证日期不会立刻收回资格,还可以继续验证 只要提交符合要求(本学年+您的全名+学校名称)基本就能过(哪怕漏洞百出,比如我的照片中水印忘记去掉、还有佬友的学号是123456这种明显错误的数字) 学生认证邮箱一定填能收到邮件的邮箱,建议一律使用收到认证邮件的谷歌邮箱 如果提交了符合要求的文件,仍然被要求补充资料,直接转人工。参考这位佬友的文章 谷歌学生二验失败_----申请人工审核教程 参考链接 可以去里面找参考图和提示词。提示词关键是 本学年 和 姓名 不要错了。 https://linux.do/t/topic/2201535 google学生二验过了 搞七捻三 佬在么?我图片验证不过,然后我试着给他发邮件 [image] [image] 这个咋搞啊? 1 个帖子 - 1 位参与者 阅读完整话题

IT之家 · 2026-05-24 10:42:28+08:00 · tech

IT之家 5 月 24 日消息,据新华社昨日报道,珠穆朗玛峰“巅峰之芯”中尼联合科考队近日成功从尼泊尔一侧登顶珠峰,并开展冰芯钻取等科学采样工作。 IT之家在此援引新华社, 科考队员完成了人类首次珠峰顶峰透底冰芯样本钻取 。目前全体队员已安全撤至珠峰南坡大本营,并在下撤过程中开展多海拔梯度冰芯、雪芯样本采集。相关样本将按照低温保存要求转运至实验室,用于研究世界最高区域气候环境变化、冰冻圈变化和高海拔大气环境记录。 据悉,珠峰顶峰是地球地理最高点,是人类观测的重要空白。此次获取的顶峰冰芯及多海拔梯度样本,将为揭示世界最高区域气候环境变化、理解极高海拔大气环流和物质传输过程提供关键样品。 科学家们将借助样本,进一步理解极高海拔区域气候环境变化、污染物向高海拔区域传输路径以及珠峰南北坡气候响应差异等关键问题。

IT之家 · 2026-05-21 08:00:15+08:00 · tech

IT之家 5 月 21 日消息,科技媒体 AppleInsider 昨日(5 月 20 日)发布博文,通过分析泄露样本,发现今年 5 月富士康北美设施遭遇的网络攻击事件中, 已流出超过 30 份苹果机密文件。 IT之家曾于 5 月 13 日报道,富士康(Foxconn)确认其位于美国威斯康星州 Mount Pleasant 的工厂本月(2026 年 5 月)遭遇网络攻击。 勒索组织 Nitrogen 声称对此负责, 窃走超过 1100 万份文件,总计约 8TB。 Nitrogen 称,窃取内容包含诸多机密指令、项目资料和图纸,涉及英特尔、苹果、谷歌、戴尔、英伟达等多个客户。 该媒体分析最新拿到的样本,发现 Nitrogen 窃取的文件中,已包含 30 多份可信度较高的苹果公司机密文档样本。 不过从披露的文档样本来看,现阶段流出的重点不是 iPhone、iPad 或 Mac,主要集中在 2020 年到 2023 年的服务器机架规格、手册,以及 2025 年末到 2026 年 3 月的服务器部件结构图。 文档展示了 Apple 服务器机箱、支架、垫片等部件尺寸,也写到机架承重、允许颜色、散热气流维护、侧板安装和稳定性测试要求。 其中最值得关注的一份文件披露苹果公司 Matterhorn 项目,文档提到,苹果部分高端服务器采用 Intel Whitley 和 Eagle Stream 平台。 按样本描述,相关服务器配备 2 颗 32 核、主频 2.2GHz 的 Intel Ice Lake Xeon 可扩展处理器,搭配 24 条 128GB DDR4 内存、NVIDIA T4 GPU,以及多块 8TB NVMe 硬盘。 除了苹果公司之外,样本显示,被窃文件还涉及 AMD、Broadcom、Google、Intel、HP、Micron、NVIDIA、Samsung、Seagate 等多家厂商,内容大多也是服务器、主板、存储与测试规范。 相关阅读: 《 富士康美国工厂遭网络攻击,总计约 8TB 超 1100 万份文件泄露 》

linux.do · 2026-05-06 18:11:44+08:00 · tech

前排提醒:本文纯技术分享,不含任何样本,请放心阅读。如有雷同,那你电脑可能也有问题(笑)。 一、我是如何中马并发觉自己中马的? 昨天晚上闲着没事,开System Informer看了一下进程,列表里赫然躺着一个colorcpl.exe。 等会,colorcpl.exe? ??? 打开Ark一看……好好好,反射加载dll。 掏出 Process Explorer 一看,好家伙,一个我不认识的日历进程YXCalendar.exe内存映射里躺着一个熟悉的陌生人:libcurl.dll。 按理说 libcurl 出现倒也不奇怪,毕竟很多程序都要用。但问题是,这文件尺寸比正常的大了那么一丢丢……就一丢丢。多出来的那部分,不用想也知道是"房东加的隔断"。 而且,libcurl是白加黑重灾区。 更离谱的是,这东西在我电脑里不知道待了多久。可能是我装某破解软件的时候顺手带进来的,也可能是我下载了什么带"学习资料"字样的压缩包……算了不重要,先抓出来看看。 二、初见样本:一场典型的"白函数"噩梦 拖进 IDA,第一眼差点没被送走。 导出表翻开一看,6000+ 个导出函数,绝大多数都是 ??_7wxDialog 这种 C++ 模板/虚表符号。往下拉、往下拉、再往下拉……满屏都是这些白函数的 vftable 和 RTTI 信息,真正的恶意逻辑不知道藏在哪里。 这感觉就像你在一座垃圾山里找一颗钻石,但钻石外面包满了卫生纸。 我按经验去看了 OEP,标准的 CRT 初始化流程,干干净净。然后又用 strings 扫了一遍 .rdata——除了常规的 kernel32、msvcrt 这些,几乎没看到什么可疑字符串。倒是扫到了 libcurlOrg.dll,确认是 DLL 代理劫持无疑,但恶意代码到底在哪? > curl_easy_cleanup -> libcurlOrg.curl_easy_cleanup > curl_easy_duphandle -> libcurlOrg.curl_easy_duphandle > curl_easy_escape -> libcurlOrg.curl_easy_escape > curl_easy_getinfo -> libcurlOrg.curl_easy_getinfo > curl_easy_init -> libcurlOrg.curl_easy_init > curl_easy_perform -> libcurlOrg.curl_easy_perform > curl_easy_recv -> libcurlOrg.curl_easy_recv > curl_easy_send -> libcurlOrg.curl_easy_send > curl_easy_setopt -> libcurlOrg.curl_easy_setopt (全是转发的函数调用……) 我手动翻了半天,越看越迷糊。那些白函数调用之间偶尔夹杂几个莫名其妙的 jmp,看着像是会跳转到某个非导出区段,但 IDA 的交叉引用根本连不上——因为压根就没引用,全是运行时拼出来的。 到这一步我已经有点烦躁了。这要是硬刚手工逆向,估计得通宵。 于是我一拍大腿:让 AI 来。 二、AI Agent 介入:自动化分析引擎 我之前的逆向工作流里有个自己写的 Python + Capstone 小脚本,本质上就是一个简单的递归反汇编器:从 OEP 出发,遇到 call 就递归,把指令打印出来。之前对付过几个小样本,还算顺手。 但这次的样本真正的恶意逻辑根本不经过 OEP,而是藏在某个导出函数里,再加上大量 call dword ptr [0xNNNN],没有符号,没有注释,看汇编等于看天书 于是我和 AI 商量了一下,决定给这个脚本做个升级: 3.1 改造一:支持从任意 RVA 出发递归反汇编 原来的脚本只能从 OEP 出发,这次加上 --rva 参数,可以从任何地址开始递归。这样我就能直接从 curl_global_init(RVA=0x0010F240)出发,不再被 OEP 那堆 CRT 垃圾淹没。 3.2 改造二:IAT 解析 这是最爽的一个改动。脚本读取 PE 的导入表,把 call dword ptr [0xNNNN] 自动解析成 call KERNEL32!CreateProcessW 这种人类可读的格式。 效果立竿见影——原本满屏的 call dword ptr [0x1010B2C0],现在一眼就能看出来这是 CreateProcessW、LoadLibraryA、GetProcAddress……恶意意图瞬间暴露。 跑完之后我拿到了 50 个函数、4000 多条指令的报告,其中带着两个 [PROC-INJ] 和一个 [DYN-API] 标注—— 跟着AI的分析,我迅速在IDA定位到了关键载荷的加载逻辑: (检测cpuid用于反调试) ![PixPin_2026-05-06_13-20-04|225x500] (经典Process Hollowing) (字符串拼接出目标进程和shellcode路径) ———— 这个函数做了三件事: SSE 拼接目标进程路径:用 movups 把四个 xmmword 常量拼到栈上,最终合成 C:\Windows\SysWOW64\colorcpl.exe。对,就是我一开始发现异常的那个进程。 这里要吐槽一下攻击者的心机——正常程序直接在 .rdata 里放字符串,strings 一扫就出来。他偏要把字符串拆成 4 块 128 位常量,用 SSE 指令运行时拼。strings 工具完全失效,IDA 里看起来也只是几个 xmmword 数值(当然F5还是能够直接拼好的),不仔细分析根本不知道这是啥。 读取配置文件:用 C++ I/O 流打开 C:\Program Files (x86)\MCWinMailAll\dkcinst.ini——这个路径也是 IDA 直接识别出来的 调用注入函数:把文件数据、大小、目标进程路径传给 sub_1010D6A0。 4.3 进程镂空:sub_1010D6A0 这才是重头戏。完整流程就是教科书级的 Process Hollowing: CreateProcessW(“colorcpl.exe”, CREATE_SUSPENDED | CREATE_NO_WINDOW) 挂起创建,窗口隐藏 LoadLibraryA(“kernel32.dll”) + 5 次 GetProcAddress 动态解析注入 API 组合:VirtualAllocEx、WriteProcessMemory、GetThreadContext、SetThreadContext、ResumeThread VirtualAllocEx(hProcess, NULL, size, MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE) 在目标进程里分配 RWX 内存(老演员了) WriteProcessMemory(hProcess, remoteAddr, payload, size, NULL) 把 Payload 写进去 GetThreadContext + SetThreadContext 修改线程上下文,把 EIP 重定向到注入代码 ResumeThread(hThread) 恢复执行,原进程被"偷梁换柱" 至此,分析结束。 三、结语 这次经历给我的最大感受是:现代恶意样本的伪装水平越来越高,但分析工具的自动化水平也在同步提升。 以前遇到这种"白函数淹没"的样本,可能要花几天时间手工扫导出表、翻字符串、追调用链。现在借助 AI Agent,我可以在几个小时内:定位恶意入口 → 递归反汇编 → 提取关键字符串 → 还原完整攻击链路。 当然,前提是你要知道自己在问什么。AI 不会替你思考,但它能极大地降低你思考到结论之间的执行成本。 最后,忠告大家: 别在实体机里跑来历不明的程序(我当然知道你们做不到,但还是要说) 保持 Process Explorer / System Informer 的习惯,没事看看进程列表 AI 是个不错的副手,尤其是在你被 6000 个白函数淹没的时候。 帖子写于某次深夜分析后的恍惚状态,如有错别字请见谅。 IDA 永远的神,但 Python + Capstone + AI Agent 在某些场景下是真的香。 3 个帖子 - 3 位参与者 阅读完整话题

linux.do · 2026-04-22 16:35:34+08:00 · tech

给佬们提供一个样本。 要素: 全程国内手机移动网络(无代理),安卓设备,设备定位开启 安卓 chrome 浏览器 邮箱 gmail 老号 手机号 +86 自用手机号 卡:招行万事达普卡 信息如实填写 姓名转成拼音,带空格?(这个不太确定有没有带空格了,感觉很玄学) 地址,招行预留地址信息转拼音,带空格(AddressLine 1 写的省份,AddressLine 2 补齐了剩下的) 完成后 upgrade :pay as you go ,使用上面一样的卡 参考这个佬友的分享: 赞美招行万事达普卡!甲骨文成功下号+升级,全程丝滑!内含踩的坑点记录 文档共建 本篇文章您将看到 地址怎么填才不踩坑? 苹果环境为啥是标配? 招行普卡真能一次过? 从注册到升级,全程实录,有坑有解,看完直接丝滑得龟壳~ 起因是一次平凡的刷论坛 无聊在论坛闲逛,发现之前很多帖子提到甲骨文似乎降低了门槛,很多友友们都成功用各种各样的卡下了账户。 虽然老话说:每下一只新龟,都有一只老龟被杀。 嘛~让我们为死去的老龟降半个窗口哀悼三秒,然后赶快开始开新龟龟! 首先,介… 话说注册了龟壳,接下来应该干什么呢? 2 个帖子 - 2 位参与者 阅读完整话题

www.ithome.com · 2026-04-22 10:47:22+08:00 · tech

IT之家 4 月 22 日消息,科技媒体 Tom's Hardware 昨日(4 月 21 日)发布博文,报道称 sheets.works 团队利用 Google Sheets 技术, 构建了一个名为“聆听博物馆”的互动网站,收录了 36 款机械键盘的音频样本。 该网站专门面向机械键盘音频爱好者,收录了 36 款从经典到现代的机械键盘样本,用户只需点击页面上的键盘图标,即可通过扬声器试听其独特的敲击声音。 在收录的机械键盘中,涵盖键盘发展史上的多个里程碑产品,包括被誉为经典的 IBM Model M、多款 Cherry MX 轴体型号,以及 SteelSeries 和 Logitech 等现代品牌的热门产品。 网站不仅提供音频,还深入解析了声音背后的物理机制。例如,在介绍 IBM Model M 时,详细阐述了其独特的发声原理:线圈弹簧侧向弯曲,驱动旋转锤击打薄膜,弹簧在空心 ABS 桶内像音叉一样共振,钢背板放大声响,外壳则充当共鸣箱,造就了无法被现代产品复制的经典声音。 关于音频准确性,该媒体编辑对比其使用的 Cherry MX Blue 轴键盘后,发现样本声音与实物存在差异。对此, sheets.works 团队在页面底部特别说明,声音测试受麦克风、房间环境、主板、键帽、编解码器及扬声器等多种因素影响,结果存在固有局限性。 IT之家附上参考地址 The Listening Museum

linux.do · 2026-04-20 20:52:52+08:00 · tech

看到有佬友贴自己的订阅,我也记录一下 感谢 @Lucas_Men 大佬的经验贴 感谢 idc flare Ryan 大佬的高速车 注册方式:美国手机号,仅有一个直接使用了,用完就后悔了,万一封号了这个手机号不知道还能不能用 支付方式:尼区IOS礼品卡,咸鱼购买后一次充值完毕(手上有美区PAYPAL,准备留着备用) ip 环境: SixtyNet 美国家宽 ,中转落地,规则模式,PC端和手机端全都使用这个IP 使用方法:计划第一周只在网页端和APP端对话,第二周开始claude code,使用一个月后升Max5x 账号相关:谷歌账号为自用1年的号,地址美国 原计划是看看几天会封,结果今天手机端开了代理后,代理居然莫名其妙自动关闭了,我在不知情的情况下打开了app,还发了对话信息,没有回复我才发现问题。不知道这样会不会被封… 2 个帖子 - 2 位参与者 阅读完整话题

www.v2ex.com · 2026-04-19 19:11:22+08:00 · tech

Claude 免费账号购买礼品卡的限制是日限 2 张周限 3 张,有订阅的账号好像是日限 2 张周限 5 张(没有足够的样本测试,不知道 Pro 和 Max 是否有区别)。 我今天帮别人买礼品卡,无意间发现我的一个账号没有日限周限(这个账号也是没有订阅的),我还纳闷为什么只有这个账号没有限制,刚才在整理邮箱里面的邮件时发现一封邮件如下: 看到这封邮件才想起来这个账号以前申诉解封过,一下子想通了为啥买礼品卡没有限制了。 既然这样的话,那可以大胆猜测应该是在数据库中加了某个标记,相对来说会耐操一些。

www.v2ex.com · 2026-04-19 19:11:22+08:00 · tech

Claude 免费账号购买礼品卡的限制是日限 2 张周限 3 张,有订阅的账号好像是日限 2 张周限 5 张(没有足够的样本测试,不知道 Pro 和 Max 是否有区别)。 我今天帮别人买礼品卡,无意间发现我的一个账号没有日限周限(这个账号也是没有订阅的),我还纳闷为什么只有这个账号没有限制,刚才在整理邮箱里面的邮件时发现一封邮件如下: 看到这封邮件才想起来这个账号以前申诉解封过,一下子想通了为啥买礼品卡没有限制了。 既然这样的话,那可以大胆猜测应该是在数据库中加了某个标记,相对来说会耐操一些。

www.v2ex.com · 2026-04-19 18:11:22+08:00 · tech

Claude 免费账号购买礼品卡的限制是日限 2 张周限 3 张,有订阅的账号好像是日限 2 张周限 5 张(没有足够的样本测试,不知道 Pro 和 Max 是否有区别)。 我今天帮别人买礼品卡,无意间发现我的一个账号没有日限周限(这个账号也是没有订阅的),我还纳闷为什么只有这个账号没有限制,刚才在整理邮箱里面的邮件时发现一封邮件如下: 看到这封邮件才想起来这个账号以前申诉解封过,一下子想通了为啥买礼品卡没有限制了。 既然这样的话,那可以大胆猜测应该是在数据库中加了某个标记,相对来说会耐操一些。

www.ithome.com · 2026-04-12 11:12:43+08:00 · tech

IT之家 4 月 12 日消息,中国载人航天工程办公室今日发布新一期天宫 TV,神舟二十一号航天员张陆、武飞、张洪章目前已经在轨 160 余天,状态良好。上周,乘组在有序推进各项空间科学实(试)验的同时,精心开展组合体平台照料,并持续守护自身健康状态。 在航天医学实验领域,乘组利用太空拉曼光谱仪, 对尿液样本中的代谢组分进行检测 ,所采集的信息将用于进一步修正和完善相关特征代谢物指标体系和评判准则。三名航天员还采集了唾液样本并冻存,助力科研人员开展菌群与肠胃功能相关研究。 上周,根据骨代谢交互调控、空间节律与睡眠等实验计划安排, 乘组完成了血液样本的采集 ,借助离心机进行处理,并妥善保存等待下行。此外,航天员使用笔记本电脑及相关实验软件,完成了元认知监控研究、应急决策能力评估、 在轨情绪状态测试 等多个项目的测试工作。 在微重力物理科学领域,实验项目按计划推进。乘组更换了流体物理实验柜内样品、燃烧科学实验柜内燃烧器和气瓶,并完成了无容器柜实验腔体样品清理、轴心机构电极维护等工作。 在空间站组合体平台照料方面,乘组按计划完成了低温存储装置、应用流体回路泵等站内设施设备的检查维护,并进行了舱内物资整理,持续守护太空家园的宜居环境。 与此同时,三名航天员的健康管理持续进行。他们使用 太空跑台、弹力带 等器械进行在轨锻炼,积极对抗失重生理效应。

36氪 · None · tech

本周五,沪深300、中证A500、科创50等十多只指数将迎来新一轮样本股调整。截至6月10日,跟踪这些指数的指数基金规模接近9000亿元,沪深300ETF规模在4000亿元以上,中证A500ET、科创50指数ETF的规模均超过1000亿元。据了解,个别指数的样本调整比例达到10%,在新易盛、兆易创新、江波龙等科技股调入指数之后,A股重要宽基指数的“含科量”明显提升。受访的公募人士认为,样本股随产业经济和技术变迁持续焕发新机,符合我国新质生产力的发展方向,也是保持指数有效性的应有之义。(证券时报)