PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘。目前又不当COO,还是得用心记代码哦!

日前網上有 MyTV X HTC One HD 版 Android app 流出,但由於程式制约了只有 HTC One 手機才可以使用,大部份用家得物無所用。當然,道高一尺,魔高一丈,很快的就有人放出破解版,解除了這個制约,Android 全機種都可以用了。

他是如何做到破解的呢?這篇文章會拆解一下這個流出來的 apk 檔,並提供一些工具給大家分析代碼,西杰相信這個過程並不困難,大部份 programmer 學一會兒就應該看得懂!(當然並不是全部 apk 檔都可以用统一方法來破解,加了殼的 apk 就比較困難了)

利申:本文章僅供教學用,請勿嘗試公開發佈破解檔案

工欲善其事,必先利其器,這次我們會用到 dex2jar 這個工具,它的用处是幫我們把 apk 爆開成多個 bytecode 檔,我們就是透過修改這些 bytecode 檔來破解 Android app 的了。值得一提的是,dex2jar 的 wiki 已經清晰說明如何把 apk 檔反譯成 bytecode 檔和如何重新打包,讀完以下教學仍不清晰的話可以參考一下。

下載了 dex2jar 之後,我們就能够開始反譯 apk 檔了,dex2jar 提供的例子是這樣:

# convert classes.dex in test_apk-debug.apk to test_apk-debug_dex2jar.jar
d2j-dex2jar.sh -f -o test_apk-debug_dex2jar.jar test_apk-debug.apk
# verify jar
d2j-asm-verify.sh test_apk-debug_dex2jar.jar
# convert to jasmin format
d2j-jar2jasmin.sh -f -o test_apk_jasmin test_apk-debug_dex2jar.jar

三個步驟,第一步將 apk 檔內的 classes.dex 抽出來並反譯成 jar,classes.dex 就是主程式所在的地方。第二步是驗証 jar 檔(但我不清晰有什麼用,估計是驗証它是不是完整可執行的檔案吧)。第三步是把 jar 檔轉為 jasmin 格式(大概是 Java bytecode 的意思)。

應用在 mytv 上,上列三個 command 應為:

./d2j-dex2jar.sh -f -o ../apk/mytvhd_prod.jar ../apk/mytvhd_prod.apk./d2j-asm-verify.sh ../apk/mytvhd_prod.jar./d2j-jar2jasmin.sh -f -o ../apk/mytvhd_prod ../apk/mytvhd_prod.jar

這個時候就應該會有一個裝滿 .j 檔的資料夾,這些 .j 檔就是我們要研讨的 bytecode 檔了。由於  MyTV 程式啟動時就已經會欄截非 HTC One 用家,因此我們當然要看看 MyTV 最開始時的那個 Activity 發生了什麼,到哪裏找呢?manifest 吧,不過說實話,有開發 Android 經驗的 programmer 應該大約估計到那個 Activity 放在何處的吧!就是 com.tvb.mytvhd.activity.StartUpActivity 了!開啟 StartUpActivity.j 後,你會看到一大堆陌生的代碼(估計你不會常常看 bytecode 吧...)

不要緊,你要仔細研讨的話可以到維基看看 Java bytecode 有什麼指令可以用,但這裏就只是快速找尋所需代碼做示範!有開發 Android app 的 programmer,Activity 啟動時執行的是哪個 method(不計 constructor)?是 onCreate!在代碼中搜尋一下吧。

看到了嗎?很短的一個 method,有注意到 229 行的這句嘛?

invokespecial com/tvb/mytvhd/activity/StartUpActivity/error_nonHTC()V

又什麼什麼 invoke,又什麼什麼 error_nonHTC ,還不是我們要找的東西!?仔細研讨一下上文下理。

每日一道理
如果说友谊是一颗常青树,那么,浇灌它的必定是出自心田的清泉;如果说友谊是一朵开不败的鲜花,那么,照耀它的必定是从心中升起的太阳。 多少笑声都是友谊唤起的,多少眼泪都是友谊揩干的。友谊的港湾温情脉脉,友谊的清风灌满征帆。友谊不是感情的投资,它不需要股息和分红。(友谊可以换其他词语)

執行 isHTCOne(),ifeq 就是如果結果等如 0 (false) 的話就跳到 L0,而 L0 就是執行 error_nonHTC(),很明顯就是要用來告訴用家它不是 HTC 機然後退出程式,那要如何改呢?方法有二:一,ifeq 轉為 ifne,那麼不是 HTC One 就能够看到,反而 HTC One 看不到;二,把整段檢查代碼刪掉,速度還可以快一點不用檢查!來試試方法二吧。

只要把相關的 ifeq 和 isHTCOne() 以及 L0: 下的檢查代碼刪掉便可!

重新打包 apk 檔,可用以下 command!

# build jar
d2j-jasmin2jar.sh -f  -o test_apk_jasmin.jar  test_apk_jasmin/
# verify jar
d2j-asm-verify.sh test_apk_jasmin.jar
# convert to dex
d2j-jar2dex.sh  -f -o classes.dex test_apk_jasmin.jar
# make a copy
cp test_apk-debug.apk test_apk-debug-toast.apk
# replace classes.dex in test_apk-debug-toast.apk
zip -r test_apk-debug-toast.apk classes.dex
# sign the apk
d2j-apk-sign.sh -f -o test_apk-debug-toast-signed.apk test_apk-debug-toast.apk

把例子中的檔案名換成相對應的 mytvhd 就能够了!

#把 jasmin 代碼重新打包成 jar 檔
./d2j-jasmin2jar.sh -f -o ../apk/mytvhd_prod_new.jar ../apk/mytvhd_prod#驗証一下
./d2j-asm-verify.sh ../apk/mytvhd_prod_new.jar #把 jar 檔變成 Dalvik VM 的 dex 檔
./d2j-jar2dex.sh -f -o ../apk/classes.dex ../apk/mytvhd_prod_new.jar#複製一份新的 apk 以免改動原有 apk
cp ../apk/mytvhd_prod.apk ../apk/mytvhd_prod_new.apk#把新的 dex 檔放到 apk 中,代替原有的 classes.dex
zip -r ../apk/mytvhd_prod_new.apk ../apk/classes.dex #sign apk
./d2j-apk-sign.sh -f -o ../apk/mytvhd_prod_new_signed.apk ../apk/mytvhd_prod_new.apk

失敗了,為什麼!?呵呵,西杰第一次嘗試就為這個蠢問題花了不少時間,原因其實很簡單,把新的 apk 解壓縮一下就能够看到問題。

看到嗎?有兩個 classes.dex,是 zip command 用錯了,classes.dex 應該要放在根目錄才可以,那解決方法呢?很簡單,把 apk/classes.dex 拉出來放在根目錄然後再 zip 一次和 sign 一次就好了。

成功了!其實破解軟件沒有大家想像的那麼難,現成工具已經做得很好,只要花少許時間分析一下人家的代碼就能够了。當然,我還是那句,本篇文章只是為了教學,研讨一下 apk,看看如何做逆向工程,並不是要你們把世界間的軟件都破下來,請尊敬別人!

參考:

https://code.google.com/p/dex2jar/wiki/ModifyApkWithDexTool

http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings

http://dukeland.hk/2013/05/13/android-apk-reverse-engineering-cracking-the-mytv-hd-restriction/

文章结束给大家分享下程序员的一些笑话语录: 人在天涯钻,哪儿能不挨砖?日啖板砖三百颗,不辞长做天涯人~

转载于:https://www.cnblogs.com/jiangu66/archive/2013/05/13/3076764.html

破解行Android apk 逆向工程研究﹣破解 MyTV HD 機種限制手記相关推荐

  1. Android apk 逆向工程研究﹣破解 MyTV HD 機種限制手記

    日前網上有 MyTV X HTC One HD 版 Android app 流出,但由於程式限制了只有 HTC One 手機才可以使用,大部份用家得物無所用.當然,道高一尺,魔高一丈,很快的就有人放出 ...

  2. [免费专栏] Android安全之APK逆向入门介绍

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  3. 《教我兄弟学Android逆向03 破解第一个Android游戏 》

    上一篇 <教我兄弟学Android逆向02  破解第一个Android程序  >我带着你破解了我们自己编的一个小程序 里面我分析并讲解的一些smali语法你都记住了 给你布置的课后作业你发 ...

  4. 菜鸟第一次挑战apk逆向,结果整得怀疑人生,终于知道android apk加密的重要性...

    最近准备从x86上转移到linux上, 于是乎弄了个手游来玩, 正巧朋友推荐了一个修改软件,类似于八门神器.CE,用于搜索修改游戏数据,于是抱着好奇的心理初步研究了下该软件的原理: 研究了下软件, 搜 ...

  5. Android APK破解、反编译、打包签名基本思路与方法

    Android APK破解.反编译.打包签名基本思路与方法 2013年6月1日星期六                                                           ...

  6. Android APK破解

    原文: http://www.blogjava.net/zh-weir/archive/2011/06/11/352099.html 所谓APK指的是Android操作系统的应用程序安装文件.所谓Cr ...

  7. ApkTool 反编译Android apk (加固逆向)

    GitHub 源码地址(其实刚开始不必关注源码的实现,我们只需知道如何完成apk的反编译) https://github.com/iBotPeaches/Apktool 我们主要需要一个jar包和 . ...

  8. 010 Android之逆向入门

    文章目录 Android APK文件结构 META-INF res AndroidManifest.xml classes.dex resources.arsc lib Assets Android ...

  9. 逆向攻击破解安卓游戏

    ** 主要使用三个工具 ** 1.Il2CppDumper软件 2.IDA_Pro_v7.0软件 3.AndroidKiller软件 使用Il2CppDumper对关键函数的偏移进行分析,也就是找到相 ...

最新文章

  1. mysql源码如何解析where字句_MySQL解析器源码分析--对select语句中子查询处理逻辑的分析(一)...
  2. oracle Hash Join及三种连接方式
  3. WinForm中 事件 委托 多线程的应用【以一个下载进度条为例】
  4. python 解压zip文件_Python 解压缩文件详解
  5. BAT执行DOS命令查找本地浏览器
  6. maya 中使用节点连接来求余数:
  7. html ng-app,为什么AngularJs写了2个及以上的ng-app=会导致页面渲染不成功
  8. android PopupWindow 显示问题
  9. 打王者、调小酒、搭乐高,大厂女程序员的别样人生!
  10. 大数据学习——关于hive中的各种join
  11. Process p = new Process();
  12. 【大数据部落】R语言基于决策树的银行信贷风险预警模型
  13. 用vbs写九九乘法表
  14. 没有基础的人如何自学裁缝?
  15. 鹏业安装算量软件运行环境_安装算量软件电脑配置
  16. python桌面应用_用Python写个Metro风格的桌面程序
  17. libcurl 使用说明和网页抓取 linux下的curl编程
  18. Fresco之强大之余的痛楚
  19. 基于中文语义词典的语义相关度量方法比较研究
  20. 计算机组成原理一篇过

热门文章

  1. 南京联通试点电力线上网 家庭用户带宽达到2M
  2. ABSA-《Aspect-Category-Opinion-Sentiment Quadruple Extraction with Implicit Aspects and Opinions》论文阅读
  3. 消息转发机制与Aspects源码解析
  4. 分享到QQ空间、新浪微博、腾讯微博的代码!(收藏)
  5. 小程序:微信小程序打包成APP
  6. 《Comprehensive Privacy Analysis of Deep Learning》补完以及Deepfool对抗样本构造算法
  7. 重装系统后固态硬盘不见了如何解决
  8. OWASP Threat Dragon
  9. 如何下载西城区卫星地图高清版大图?
  10. redis连接数合理配置_redis如何进行合理配置,这10种配置参数你必须知道