加载中…
个人资料
淡然出尘
淡然出尘
  • 博客等级:
  • 博客积分:0
  • 博客访问:139,044
  • 关注人气:159
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

去除<捕鱼达人2>重打包检验的三种方法

(2014-08-07 00:03:06)
标签:

捕鱼达人

分类: 技术杂烩
  • 很早也很多人对<捕鱼达人2>的校验有过研究,以前很菜搞不定,所以一直将这款软件压在箱底。随着搬砖搬的越来越多技术还算有点进步,就重新拿出来了。有人其实不少人说该游戏是签名校验,其实我试验之后,却发现并不是签名校验,而是classes的MD5校验。确定的方法很简单:压缩包的形式删除原签名然后重新签,不闪退的证明不是签名校验;反编译了classes.dex然后重新打包闪退的,则是包内文件的有关校验。

一、将Smali文件中获取包路径的参数转向我们自定义的。

该种方法最早见于:http://bbs.csdn.net/topics/390598569?page=2#post-395954285

竟然闪退那必然会在主Activity的oncreate中启动相关代码。下面是流程:

public class FishingJoy extends FishingJoyWrapper-->public class FishingJoyWrapper extends Cocos2dxActivity-->public abstract class Cocos2dxActivity extends Activity;

注意:class A extends B 表示A类承接B类,即B是A的相对父类。从而知 Cocos2dxActivity 是程序启动时的根类,查看 oncreate 方法:

  protected void onCreate(Bundle paramBundle)
  {
    super.onCreate(paramBundle);
    init();
    Cocos2dxHelper.init(this, this);
  }
又转向至 Cocos2dxHelper 类的 init 方法中,下面是其主要的smali代码:

“参考文章:http://android.tgbus.com/Android/tutorial/201108/362210.shtml

 

    //通过ApplicationInfo类中的packageName方法获取程序名称并保存在sPackageName字符串中
    iget-object v1, v0, Landroid/content/pm/ApplicationInfo;->packageName:Ljava/lang/String;
    sput-object v1, Lorg/cocos2dx/lib/Cocos2dxHelper;->sPackageName:Ljava/lang/String;
    //通过ApplicationInfo类中的sourceDir方法获取APK程序的路径,并传递给native层
    iget-object v1, v0, Landroid/content/pm/ApplicationInfo;->sourceDir:Ljava/lang/String;
    invoke-static {v1}, Lorg/cocos2dx/lib/Cocos2dxHelper;->nativeSetApkPath(Ljava/lang/String;)V

 

通过以上分析我们很容易得出,只需将获取APK路径的v1转向原版的APK即可绕过程序的校验。代码修改为:

 

    iget-object v1, v0,Landroid/content/pm/ApplicationInfo;->sourceDir:Ljava/lang/String;
    const-string v1, "/sdcard/buyudaren.apk"
    invoke-static {v1}, Lorg/cocos2dx/lib/Cocos2dxHelper;->nativeSetApkPath(Ljava/lang/String;)V

 

需要的操作是将原版apk更名为buyudaren.apk放在sdcard的根目录即可。

 

“以下两种方法:http://www.52pojie.cn/forum.php?mod=redirect&goto=findpost&ptid=280003&pid=6338814

 

二、我们上面知道该游戏是在native层对classes.dex文件进行校验的,所以我们在反编译后的lib文件夹进行“classes.dex”的搜索。可知 libgame.so 和 libsmsiap.so 两个文件都有,但是我们怎么区分呢?很简单那就是搜索路径传入的方法 nativeSetApkPath ,从而可以确定 libgame.so 是关键。用IDA或者UE打开这个so,定位到classes.dex的位置会看到一串字符:8c1b87af8ab671fc6caadf5adc65fd31 很容易想到MD5值,然后将原版的dex从apk中拉出来,计算得这串字符确实是未修改的classes.dex的MD5值。
所以修改方法就是将该字符串修改为订正后的classes.dex的MD5,然后签名安装即可。

 

三、偷天换日。

“so与dex互验证欺骗:http://www.kanxue.com/bbs/showthread.php?t=190711
这个方法很巧妙,是天哥推荐的一种方法,流程是这样的:
启动修改的classes.dex-->加载libgame.so-->验证classes.dea的MD5值,而classes.dea文件是我们将原版classes.dex修改后缀之后放在apk之中的,这样亦可绕过验证。运用的规则是:程序启动只认classes.dex文件,而so中的验证只认赋予它的参数。

样本:http://pan.baidu.com/s/1hqzLO9I

 

 

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有