六个常见的脱壳方式
文章来自:https://mp.weixin.qq.com/s/pcX_zaqrNsbv89VQm5NLsQ
一、BlackDex:软件方案
BlackDex:https://github.com/CodingGay/BlackDex
限制条件:版本貌似<=7.x
BlackDex32和BlackDex64两个都直接打开选中要脱壳的软件,等待即可:
Dex存储目录:/storage/emulated/0/Android/data/top.niunaijun.blackdexa64/dump/软件包名中(如果是32就后面64改32即可)
、
这种脱出来这么点的,基本就不是了,选中看一眼就知道了,可以尝试其他方案。
二、DITOR:模块方案1
限制条件:安卓版本还是<=7.x
先在Xposed里面勾选启用模块。
然后点击/直接点击app图标进入:
这里我安卓7.1.2的模拟器装的用第一个getDex云脱壳方案,安卓7以上的用dumpMemery方案。
目录在**/storage/emulated/0/dexInjector/软件包名下**
三、反射大师:模块方案2
限制条件:安卓版本还是<=7.1.0
这里由于”爱作业“这个倒霉蛋不支持7.1以下运行,所以换个倒霉蛋客串一下。
长按-写出DEX
四、frida-dexdump:Frida方案
使用方式看这篇文章
五、脱壳脚本:脚本方案
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('7 1g(){2 1f=a.g(\'h.8\',\'M\');2 M=c i(1f,\'6\',[\'e\',\'6\']);2 15=a.g("h.8","11");2 11=c i(15,"6",["6","e","6"]);2 19=a.g(\'h.8\',\'w\');2 w=c i(19,\'6\',[\'6\']);2 4=y.K("/1u/1r/1s");2 9=M(4,0);3(9!=-1){2 U=y.1x(1b);2 W=11(9,U,1b);w(9);W=f(U).E();Z W}Z"-1"}7 u(4){2 16=a.g(\'h.8\',\'u\');2 u=c i(16,\'6\',[\'e\',\'6\']);2 14=a.g(\'h.8\',\'X\');2 X=c i(14,\'e\',[\'e\']);2 17=a.g(\'h.8\',\'T\');2 T=c i(17,\'6\',[\'e\']);2 q=y.K(4);2 V=X(q);3(V!=0){T(V);Z 0}u(q,1a);o(4)}7 o(4){2 18=a.g(\'h.8\',\'o\');2 o=c i(18,\'6\',[\'e\',\'6\']);2 q=y.K(4);o(q,1a)}7 G(){2 s=B.1G("s.8");2 p=k;2 O=s.1B();1A(2 x=0;x<O.1z;x++){2 v=O[x];2 m=v.1C;3(m.d("1F")>=0&&m.d("1m")>=0&&m.d("1E")>=0&&m.d("1D")>=0){n.l(m,v.1k);p=v.1k}}2 Q={};2 A=1;n.l("[1m:]",p);3(p){13.10(p,{12:7(j){2 N=j[5];2 t=f(N).1h(B.P).1L();2 Y=f(N).1h(B.P+B.P).1M();3(Q[t]==L){Q[t]=Y;2 1e=f(t).E();3(1e.d("H")==0){2 z=1g();3(z!="-1"){2 S="/1i/1i/"+z+"/1J/1N"+z;u(S);2 I=S+"/1I"+(A==1?"":A)+".H";n.l("[1K H]:",I);2 9=c 1H(I,"1o");3(9&&9!=k){A++;2 1l=f(t).1q(Y);9.1p(1l);9.1n();9.w();n.l("[1w H]:",I)}}}}},J:7(R){}})}}2 r=1v;7 1y(){13.10(a.1d(k,"1c"),{12:7(j){2 b=j[0];3(b!==L&&b!=k){2 4=f(b).E();3(4.d("s.8")>=0){D.C=F;n.l("[1c:]",4)}}},J:7(R){3(D.C&&!r){G();r=F}}});13.10(a.1d(k,"1j"),{12:7(j){2 b=j[0];3(b!==L&&b!=k){2 4=f(b).E();3(4.d("s.8")>=0){D.C=F;n.l("[1j:]",4)}}},J:7(R){3(D.C&&!r){G();r=F}}})}1t(G);',62,112,'||var|if|path||int|function|so|fd|Module|pathptr|new|indexOf|pointer|ptr|getExportByName|libc|NativeFunction|args|null|log|symbol_name|console|chmod|addr_DefineClass|cPath|is_hook_libart|libart|base|mkdir|symbol|close|index|Memory|process_name|dex_count|Process|can_hook_libart|this|readCString|true|dump_dex|dex|dex_path|onLeave|allocUtf8String|undefined|open|dex_file|symbols|pointerSize|dex_maps|retval|dex_dir_path|closedir|buffer|dir|result|opendir|size|return|attach|read|onEnter|Interceptor|opendirPtr|readPtr|mkdirPtr|closedirPtr|chmodPtr|closePtr|755|0x1000|dlopen|findExportByName|magic|openPtr|get_self_process_name|add|data|android_dlopen_ext|address|dex_buffer|DefineClass|flush|wb|write|readByteArray|self|cmdline|setImmediate|proc|false|dump|alloc|hook_dlopen|length|for|enumerateSymbols|name|DexFile|Thread|ClassLinker|findModuleByName|File|class|files|find|readPointer|readUInt|dump_dex_'.split('|'),0,{})) |
该脚本来源网络,能解决部分加固如360、腾讯、xxx等,就一个字:吊
六、网址:最终万能方案
APK无脑上传即可,除了脱不了的都是脱得了的✌,可以说非常万能。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Muhe's Blog!