返回列表 发新帖

【脱壳脚本】支持安卓4.4-11

  [复制链接]

172

主题

3413

回帖

1万

积分

博士生

大宇宙

Rank: 7Rank: 7Rank: 7

金币
6947
好评
261
信誉
109

MT论坛帅哥考神MT论坛最佳新人MT论坛活跃会员MT论坛侠客MT论坛灌水老大MT论坛新人

QQ
发表于 2022-1-10 21:15:33 来自手机  | 显示全部楼层 | 阅读模式  来自 浙江–金华–义乌



  1. 'use strict';

  2. /**
  3. * 支持: 安卓 4.4 —— 11.0
  4. */


  5. function logPrint(log) {
  6.     var theDate = new Date();
  7.     var hour = theDate.getHours();
  8.     var minute = theDate.getMinutes();
  9.     var second = theDate.getSeconds();
  10.     var mSecond = theDate.getMilliseconds()

  11.     hour < 10 ? hour = "0" + hour : hour;
  12.     minute < 10 ? minute = "0" + minute : minute;
  13.     second < 10 ? second = "0" + second : second;
  14.     mSecond < 10 ? mSecond = "00" + mSecond : mSecond < 100 ? mSecond = "0" + mSecond : mSecond;

  15.     var time = hour + ":" + minute + ":" + second + ":" + mSecond;
  16.     console.log("[" + time + "] " + log);
  17. }

  18. function getAndroidVersion(){
  19.     var version = 0;

  20.     if(Java.available){
  21.         var version = parseInt(Java.androidVersion);
  22.     }else{
  23.         logPrint("错误: 无法获得Android版本");
  24.     }
  25.     logPrint("[*] Android version: " + version);

  26.     return version;
  27. }

  28. function getFunctionName(){
  29.     var i = 0;
  30.     var functionName = "";

  31.     // Android 4: hook dvmDexFileOpenPartial
  32.     // Android 5: hook OpenMemory
  33.     // after Android 5: hook OpenCommon
  34.     if (g_AndroidOSVersion > 4){ // android 5 and later version
  35.         // OpenCommon is in libdexfile.so in android 10 and later
  36.         var soName = g_AndroidOSVersion >= 10 ? "libdexfile.so" : "libart.so";
  37.         var artExports =  Module.enumerateExportsSync(soName);
  38.         for(i = 0; i< artExports.length; i++){
  39.             if(artExports[i].name.indexOf("OpenMemory") !== -1){
  40.                 functionName = artExports[i].name;
  41.                 logPrint("[*] Export index: " + i + " -> "+ functionName);
  42.                 break;
  43.             }else if(artExports[i].name.indexOf("OpenCommon") !== -1){
  44.                 if (g_AndroidOSVersion >= 10 && artExports[i].name.indexOf("ArtDexFileLoader") !== -1)
  45.                     continue;
  46.                 functionName = artExports[i].name;
  47.                 logPrint("[*] Export index: " + i + " -> "+ functionName);
  48.                 break;
  49.             }
  50.         }
  51.     }else{ //android 4
  52.         var dvmExports =  Module.enumerateExportsSync("libdvm.so");
  53.         if (dvmExports.length !== 0) {
  54.             for(i = 0; i< dvmExports.length; i++){
  55.                 if(dvmExports[i].name.indexOf("dexFileParse") !== -1){
  56.                     functionName = dvmExports[i].name;
  57.                     logPrint("[*] Export index: " + i + " -> "+ functionName);
  58.                     break;
  59.                 }
  60.             }
  61.         }else {
  62.             dvmExports = Module.enumerateExportsSync("libart.so");
  63.             for(i = 0; i< dvmExports.length; i++){
  64.                 if(dvmExports[i].name.indexOf("OpenMemory") !== -1){
  65.                     functionName = dvmExports[i].name;
  66.                     logPrint("[*] Export index: " + i + " -> "+ functionName);
  67.                     break;
  68.                 }
  69.             }
  70.         }
  71.     }
  72.     return functionName;
  73. }

  74. function getg_processName(){
  75.     var g_processName = "";

  76.     var fopenPtr = Module.findExportByName("libc.so", "fopen");
  77.     var fgetsPtr = Module.findExportByName("libc.so", "fgets");
  78.     var fclosePtr = Module.findExportByName("libc.so", "fclose");

  79.     var fopenFunc = new NativeFunction(fopenPtr, 'pointer', ['pointer', 'pointer']);
  80.     var fgetsFunc = new NativeFunction(fgetsPtr, 'int', ['pointer', 'int', 'pointer']);
  81.     var fcloseFunc = new NativeFunction(fclosePtr, 'int', ['pointer']);

  82.     var pathPtr = Memory.allocUtf8String("/proc/self/cmdline");
  83.     var openFlagsPtr = Memory.allocUtf8String("r");

  84.     var fp = fopenFunc(pathPtr, openFlagsPtr);
  85.     if(fp.isNull() === false){
  86.         var buffData = Memory.alloc(128);
  87.         var ret = fgetsFunc(buffData, 128, fp);
  88.         if(ret !== 0){
  89.             g_processName = Memory.readCString(buffData);
  90.             logPrint("[*] ProcessName: " + g_processName);
  91.         }
  92.         fcloseFunc(fp);
  93.     }
  94.     return g_processName;
  95. }

  96. function arraybuffer2hexstr(buffer)
  97. {
  98.     var hexArr = Array.prototype.map.call(
  99.         new Uint8Array(buffer),
  100.         function (bit) {
  101.             return ('00' + bit.toString(16)).slice(-2)
  102.         }
  103.     );
  104.     return hexArr.join(' ');
  105. }

  106. function checkDexMagic(dataAddr){
  107.     var magicMatch = true;
  108.     var magicFlagHex = [0x64, 0x65, 0x78, 0x0a, 0x30, 0x33, 0x35, 0x00];

  109.     for(var i = 0; i < 8; i++){
  110.         if(Memory.readU8(ptr(dataAddr).add(i)) !== magicFlagHex[i]){
  111.             magicMatch = false;
  112.             break;
  113.         }
  114.     }

  115.     return magicMatch;
  116. }

  117. function checkOdexMagic(dataAddr){
  118.     var magicMatch = true;
  119.     var magicFlagHex = [0x64, 0x65, 0x79, 0x0a, 0x30, 0x33, 0x36, 0x00];

  120.     for(var i = 0; i < 8; i++){
  121.         if(Memory.readU8(ptr(dataAddr).add(i)) !== magicFlagHex[i]){
  122.             magicMatch = false;
  123.             break;
  124.         }
  125.     }

  126.     return magicMatch;
  127. }

  128. function dumpDexToFile(isDex, begin, g_processName) {
  129.     //console.log(hexdump(begin, { offset: 0, header: false, length: 64, ansi: false }));
  130.     var dexType;
  131.     isDex ? dexType = "dex" : dexType = "odex";
  132.     var magic = Memory.readUtf8String(begin).replace(/\n/g, '');
  133.     var address = ptr(begin).add(isDex ? 0x20 : 0x1C);
  134.     var dex_size = Memory.readInt(ptr(address));
  135.     var dex_path = "/data/data/" + g_processName + "/" + dex_size + "." + dexType;
  136.     var dex_file = new File(dex_path, "wb");

  137.     dex_file.write(Memory.readByteArray(begin, dex_size));
  138.     dex_file.flush();
  139.     dex_file.close();

  140.     logPrint("magic : " + magic );
  141.     logPrint("size  : " + dex_size);
  142.     logPrint("dumped " + dexType + " [url=home.php?mod=space&uid=1626]@[/url] " + dex_path + "\n");
  143. }

  144. function dumpDex(moduleFuncName, g_processName){
  145.     if(moduleFuncName !== ""){
  146.         var hookFunction;
  147.         if (g_AndroidOSVersion > 4) {
  148.             hookFunction = Module.findExportByName("libart.so", moduleFuncName);
  149.         } else {
  150.             hookFunction = Module.findExportByName("libdvm.so", moduleFuncName);
  151.             if(hookFunction == null) {
  152.                 hookFunction = Module.findExportByName("libart.so", moduleFuncName);
  153.             }
  154.         }
  155.         Interceptor.attach(hookFunction,{
  156.             onEnter: function(args){
  157.                 var begin = 0;
  158.                 var dexMagicMatch = false;
  159.                 var odexMagicMatch = false;

  160.                 dexMagicMatch = checkDexMagic(args[0]);
  161.                 if (dexMagicMatch === true){
  162.                     begin = args[0];
  163.                 }else {
  164.                     odexMagicMatch = checkOdexMagic(args[0]);
  165.                     if (odexMagicMatch === true) {
  166.                         begin = args[0];
  167.                     }
  168.                 }

  169.                 if (begin === 0){
  170.                     dexMagicMatch = checkDexMagic(args[1]);
  171.                     if(dexMagicMatch === true) {
  172.                         begin = args[1];
  173.                     }else{
  174.                       odexMagicMatch = checkOdexMagic(args[1]);
  175.                       if(odexMagicMatch === true) {
  176.                           begin = args[1];
  177.                       }
  178.                     }
  179.                 }
  180.                 if (dexMagicMatch === true) {
  181.                     dumpDexToFile(dexMagicMatch, begin, g_processName);
  182.                 } else if(odexMagicMatch === true) {
  183.                     dumpDexToFile(odexMagicMatch, begin, g_processName);
  184.                 }
  185.             },
  186.             onLeave: function(retval) {
  187.             }
  188.         });
  189.     }else{
  190.             logPrint("错误: 找不到正确的模块功能.");
  191.     }
  192. }

  193. // Main code
  194. var g_AndroidOSVersion = getAndroidVersion();
  195. var g_moduleFunctionName = getFunctionName();
  196. var g_processName = getg_processName();

  197. if(g_moduleFunctionName !== "" && g_processName !== ""){
  198.     dumpDex(g_moduleFunctionName, g_processName);
  199. }
复制代码
已有4人评分好评 金币 理由
✨自由如风✨ + 1 + 1 赞一个!
北辰没有林安 + 1 + 1
jK + 1 + 1 为什么会这样子呢
Wakes + 1 + 1

查看全部评分 总评分:好评 +4  金币 +4 

回复

使用道具 举报

172

主题

3413

回帖

1万

积分

博士生

大宇宙

Rank: 7Rank: 7Rank: 7

金币
6947
好评
261
信誉
109

MT论坛帅哥考神MT论坛最佳新人MT论坛活跃会员MT论坛侠客MT论坛灌水老大MT论坛新人

QQ
发表于 2022-1-10 21:17:02 来自手机  | 显示全部楼层  来自 浙江–金华–义乌
沙发………
回复

使用道具 举报

51

主题

4580

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
1943
好评
10
信誉
111
发表于 2022-1-10 21:18:35 来自手机  | 显示全部楼层  来自 河南
回复

使用道具 举报

34

主题

5021

回帖

1万

积分

博士生

闪电⚡️五连鞭

Rank: 7Rank: 7Rank: 7

金币
3496
好评
90
信誉
128

MT论坛新人考神MT论坛活跃会员MT论坛侠客MT论坛最佳新人

发表于 2022-1-10 21:19:34 来自手机  | 显示全部楼层  来自 福建
看看看看
回复

使用道具 举报

0

主题

2793

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
688
好评
1
信誉
100
发表于 2022-1-10 21:20:10 来自手机  | 显示全部楼层  来自 广西
看看隐藏
回复

使用道具 举报

92

主题

1977

回帖

9159

积分

硕士生

Rank: 6Rank: 6

金币
938
好评
196
信誉
115

MT论坛最佳新人MT论坛侠客

QQ
发表于 2022-1-10 21:21:05 来自手机  | 显示全部楼层  来自 广东
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

102

主题

3907

回帖

9174

积分

硕士生

Rank: 6Rank: 6

金币
431
好评
8
信誉
100
发表于 2022-1-10 21:25:09 来自手机  | 显示全部楼层  来自 广东
看看
回复

使用道具 举报

0

主题

94

回帖

435

积分

初中生

Rank: 3Rank: 3

金币
192
好评
0
信誉
90
发表于 2022-1-10 21:32:18 来自手机  | 显示全部楼层  来自 广东
.................
回复

使用道具 举报

35

主题

6577

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
1502
好评
6
信誉
172

考神MT论坛新人MT论坛帅哥MT论坛最佳新人

QQ
发表于 2022-1-10 21:34:02 来自手机  | 显示全部楼层  来自 河北
回复

使用道具 举报

9

主题

3670

回帖

2万

积分

博士后

Rank: 8Rank: 8

金币
4508
好评
3
信誉
100

2019-5.1节快乐MT论坛帅哥MT论坛最佳新人考神MT论坛新人挂机大佬

QQ
发表于 2022-1-10 21:34:04 | 显示全部楼层  来自 四川
看看
回复

使用道具 举报

11

主题

6715

回帖

2万

积分

博士后

Rank: 8Rank: 8

金币
3675
好评
18
信誉
259

MT论坛最佳新人MT论坛帅哥考神MT论坛新人MT论坛活跃会员

发表于 2022-1-10 21:41:14 来自手机  | 显示全部楼层  来自 福建
支持

回复

使用道具 举报

3

主题

1654

回帖

6055

积分

硕士生

Rank: 6Rank: 6

金币
2283
好评
3
信誉
101

考神MT论坛帅哥MT论坛最佳新人MT论坛新人

发表于 2022-1-10 21:46:46 来自手机  | 显示全部楼层  来自 江西
看看看看
回复

使用道具 举报

17

主题

3953

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
8761
好评
4
信誉
100
发表于 2022-1-10 21:47:45 | 显示全部楼层  来自 北京
前排围观一下
回复

使用道具 举报

0

主题

416

回帖

2549

积分

大学生

Rank: 5Rank: 5

金币
1361
好评
0
信誉
100
发表于 2022-1-10 21:48:59 来自手机  | 显示全部楼层  来自 湖南
就看看隐藏
回复

使用道具 举报

90

主题

3915

回帖

1万

积分

博士生

白鹰

Rank: 7Rank: 7Rank: 7

金币
1246
好评
91
信誉
208

考神MT论坛帅哥MT论坛最佳新人MT论坛活跃会员MT论坛新人MT论坛侠客

发表于 2022-1-10 21:50:44 来自手机  | 显示全部楼层  来自 新疆
看看     
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表