注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

熊猫正正的博客

熊猫正正的天空

 
 
 

日志

 
 

爱加密和梆梆的加固的破解方法  

2013-12-09 15:01:01|  分类: Android开发与逆 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

爱加密和梆梆加固的破解方法

By Bob Pan

梆梆与爱加密都使用了将原有的dex隐藏, 在运行时解压, 并且通过修改app的类加载器的方式实现加固. 参考:AndoridAPK反逆向解决方案:梆梆加固原理探寻

然而, 不管如何隐藏dex, 最终在运行时都必须释放到内存, 所以本文的思路是从内存中找到解密后的dex文件, 进而得到加固前的apk.

爱加密

爱加密的app并没有做反调试的保护. 打开app之后直接使用gdb连接, 然后用gcore, 产生core dump.

使用ps查看pid

使用gdb连接pid

使用gcore产生core dump

 

将产生的core.1033复制回电脑, 并使用编辑器打开, 通过类名找到dex中string-data段, 然后通过查找’dex.035’可以找到多离string-data最近的个dex头. dex文件头偏移32的整形值就是dex的文件长度. 使用dd命令可以从内存中抠出dex.

通过类名找string-data段

找到最近的dex文件头(0x4f87a08)和dex文件大小0x07c0

使用dd抠出dex

这个文件是个完整的dex文件, 并且可以被dexdump直接打印

梆梆

梆梆加固的程序做了anti-ptrace, 表现为使用gdb --pid 连接不上对应的进程, 利用kernel-model打印ptrace的记录, 可以看出梆梆

l  使用了3个进程互相ptrace.

l  发送错误指令来检查ptrace是否被劫持(反回值是-3行, 尝试让1568进程继续执行, 但是1568并未被ptrace, 必须出错),

l  利用ptrace修改另一个进程的数据(action是5的行).

ptrace系统调用的记录, 右边是ptrace的参数

虽然连不上1552, 但是dalvik是一个多线程的程序, 里面包含主进程, gc线程, binder线程等, 虽然我们用gdb连不上主线程, 但是我们可以连上其他线程, 这些线程的tid在/proc/[pid]/task/目录下.


Gdb连接任意一个tid

拿到coredump后与爱加密一样做相同的处理, 可以拿到dex.

总结

爱加密和梆梆通过隐藏dex确实可以让大部分静态分析工具找不到执行代码, 但是在动态运行的时候无可避免的需要将dex在内存中还原. 虽然梆梆做了反调试, 但是通过其他方式也同样可以获取其内存. 通过本文的方法分析其内存然后恢复dex, 更进一步可以完全恢复原始apk. 从这个角度说, 爱加密和梆梆的加固形同虚设.


转自:http://blog.csdn.net/pxb1988/article/details/17167795

  评论这张
 
阅读(5176)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

${a.selfIntro|escape}{if gss=tter}${suloct">1}{ }y s="cnt ztag治ts y ss="m-lmiddlmbgatag"> 10a;
${fn(x.uot;,26)|escape}= 日志--/ 过这篇日志的人le=ign ss="n ii{ass= a as x} {if !!x} di=s="cnt ztagcn0 icntbarfce1 nasf4t=p u="hquot;_b"uot; rp:o"yofocus0} =p cnt cleaspa6sp他们还an> 了le=ign sul/ {ass= b as y} di{if !!y} didi=licnt clearrbie> qhide" icn0 ic d#183 ${y.dblog?emaBl=pT享到|escape}= s qhide" id sep-spaan>an> 以看le=i su=ghide" i3 cc"> {ass= d as x} di=licnt clea">
diass="f-myLikelock icn0 ic d#183 ${x.referBl=pT享到|escape}= >="aquot;_b"uot; rp:hide" ispa7 m2="hot;ht"${x.referHomePes/}o>${x.referUserNinw|escape}= --/ ${x.q享到|yofault:""|escape}= {ass= a as x} {if !!x} slicnt cleathiyod/="aquot;_b"uot; rp:hide" ispa3 m2="hot;ht"log.csdn.net163ifra/${x.userNinw}/${x.r rexstyl}/?r rsonalRblogBl=p"hq享到t"${x.q享到|yofault:""|escape}o>${x.q享到|yofault:""|escape}= --/ {ass= a as x} {if !!x} slicnt cleathiyod/="aquot;_b"uot; rp:hide" ispa3 m2="hquot;_b"uot; rp:oreft"${x.il=pue=|yofault:""|escape}?dblog?emaRle=e="hq享到t"${x.il=pTddl|yofault:""|escape}o>${x.il=pTddl|yofault:""|escape}= --/ 4}{bss=k}{ } {if !!x} iiii=licnt cleathiyospan id iiii="adlink" m2="hquot;_b"uot; rp::ot;ht"ww.csdnil=p.163ifra/${x.userNinw}/${x.r rexstyl|yofault:""}" hq享到t"${x.q享到|yofault:""|escape}o>${fn1(x.q享到,60)|escape}=${fn2(x.olofterTime,'yyyy-MM-dd HH:mm:ss')}=i iiii=/as/ ii{/ } ii{/ass=} di=躸l/ 日志--/ ${fn(x.q享到,26)|escape}=&nb >&nb-62t=pdiv> iii=s="cnt ztaglock ithiyod/="ahide" im2="h:ot;ht"ww.csdnng2010@126.il=p.163ifra/${il=pDetazh.preBl=pP/texstyl}/=p${il=pDetazh.preBl=pT享到|escape}=&nb >&nb-619=pdiv> iii=s="cnt ztaglight: thiyod/="ahide" im2="hot;ht"ww.csdnng2010@126.il=p.163ifra/${il=pDetazh.n:10Bl=pP/texstyl}/=p${il=pDetazh.n:10Bl=pT享到|escape}= --/ u="hquot;_b"uot; rp:o"yofocusqype{elseif x.qype==3} js-t?act=ype{else}{ }"hquot;_b"uot; rp:o"yofocus iiiiiiiiiiii="ahide" ihle=ogLsp:o"yofocus v> =e=&qa;ht"${e=&px; (hle=styes.e=&prc,240,150,ifra)}"> v> = qhide" iic:hidie>i v> = qhide" iinfoie> qhide" icmgdesc thiyod/${hle=styes.q享到|escape} =ul/ v> ii{if yoftyed('ogLsass=')&&ogLsass=.length>0} {ass= ogLsass= as x} di {if x_痰,x>7}{bss=k}{ } v> iiii=licnt cleathiyod/="ao"yofocusass="f-myLikecn0 icndo_d>· iiii{/ass=} ii{/ } v> =躸l/ v> =s="cnt ztagdownht;d163ogLsp> v ="ahide" iIpa3"hquot;_b"uot; rp:o"yofocus 日志 "aquot;_b"uot; rp:hide" ispa3 m2="hot;ht"ww.csdnil=pc163ifra">
is=" =s="certeil=pPubascAcc76is="
ii=s="cnt ztagcasame> s=" ii=s="cnt ztag">
>is=" ii=is=" div> 投票给 i {vcleair023opg行) = ifra;} dili{ass= x.toteDetazhLss= as toteToOpg行)} dili {if toteToOpg行)==1} i {if air023opg行)==false},{/ }div> div> “${i[toteToOpg行)_痰,x]}”div> div> i {/ } {/ass=} {if (x."noe!="- <) },“我是${c[x."noe]}”div> div> {/ } div> div> div> div> ass="f-myLikespaan>div> div> div> div> ${fn1(x.toteTime)}=i iiii{if x.userNinw==''}{ } {/ } {/ass=} 的永久链接,作为> 的唯一标识 vclewumiiTags = "⒂肽嫦" /> "; //> 标签,以英文逗号分隔e="纾"标签1,标签2" vclewumiiS 数目,te为默认的显示模式(1为> 字,2为图yle=3为自动) ig="iphe div> s=" ii=s="cnt ztagr cr hmebo>div> s=" div> s=" ii=s="cnt ztagr br bho>div> s=" ii=s="cnt ztagc bc bh lcro>div> s=" div> s=" ii=s="cnt ztagl wl t lto>div> s=" ii=s="cnt ztagl wl b lbiediv> div> s=" ii=s="cnt ztaglewr b rbiediv> s="cnt ztagi hiediv> s="cnt ztagr hiediv> s="cnt ztagc hiediv> /s=" s="cnt ztagnb-ass1 n-fo_d> >s="cnt ztagwkg hme <=&>页脚 2e >s="cnt ztagk"> =a:t;noowtuot; h=cnt cleam2=span8"hquot;_b"uot; rp:ot;ht"ww.csdnyxpc163ifra">我的otyl书=手机博客= qhide" icn0 icnm2=s>&nb >&nb-919=pdiv> ="ahide" im2=span8">订阅此博客=网易公司版权所有div> dcopy;1997-_048=ign is=" is=" is=" qhide" ifr-cn0 icn cas>&n1s>&n1-4iediv> >"ahide" ip="hqghtet="uot; rp:oreft"ww.csdnil=pc163ifra/治tivig行).do?h102=治tivig行)&&user" re=${u}o>${u}=i${x.g}=is="e {ass= x.l as y} didi="ahide" iitm >u="hot;ht"t="o"yofocus${y.n}=iu="hot;ht"t="o"yofocus ' ,imes/Up然篹Time:1292863832223 ,basaue=:'ww.csdnpzheng.il=p.163ifra/' ,gemaer:'他' ,ndazh:'ng2010@126.com">ig="iphe ig="iphe ig="iphe ig="iphe 1s)},i[r].l=1*ogL Dphi();a=s.css=teEoct">1(o), m=s.tetEoct">1sByTagNinw(o)[0];a.async=1;a.a;htg;m."truetNpte.insertBofore(a,m) })(w痰萶w,docut">1,'g="iph','//er.cgool到-analyticscfra/analyticscjs','ga'); ga('css=te', 'UA-69204963-1', '> o'); ga('sema', 'pes/view'); },300); >ig="iphe >g="iph qype="g:10/javag="iphme w痰萶w.setTimeout(fun蝨ion(){ v>J.ht;dS="iph('ww.csdnmusic.ph.> v>J.3102DphaByDWR(="mig行).las,'MusicBeanNew','ge1ig="iphe >g="iphe w痰萶w.setTimeout(fun蝨ion(){ andrng="iphi= docut">1.css=teEoct">1('g="iph'); g="iph.asynci= 1; g="iph.a;hi= 'ww.csdni1.net.>1.body.appemaChild(g="iph); },300); >ig="iphe ig="iphe