开心消消乐过签名验证方法及分析
本帖最后由 Mr白白小武 于 2015-8-13 19:07 编辑1.可以直接解密lua脚本,然后修改,
2.可以通过本文下面的方法
说下he.jar的文件加密。ida 看下so文件的代码可以知道,加密方式就是简单的异或加密查看加壳的smali文件 这是会load一个men的lib 解密算法应该在这里
打开ida 看看算法,
这个时候可以解密了
也可以通过/data/data/com.happyelements.AndroidAnimal/目录下寻找解密的文件
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub Path path
FileInputStream fileInputStream=new FileInputStream("C:\\Users\\小白\\Desktop\\he.jar");
byte[] b=new byte;
fileInputStream.read(b);
byte[] result=new byte;
for (int i = 0; i < b.length; i++) {
result=(byte)(b^0x66);
}
fileInputStream.close();
FileOutputStream fileOutputStream=new FileOutputStream("C:\\Users\\小白\\Desktop\\he_n.jar");
fileOutputStream.write(result);
fileOutputStream.close();
}
}
解密可以使用@世事繁华皆成空提供的工具消消乐解密工具(可视化直接拖进去即可)
解压出来即可进行修改了,
加密的在异或一次即可
开心消消乐的游戏验证,现在的验证基本上分成两个方面1. 传统的签名验证2. 签名文件的验证这里我在提供一个插件 可以帮助我们快速定位调用签名的地方,这样以后处理签名验证的时候就方便了不在每次都搜索了,这个是xposed插件激活下就行了在传统的签名验证实在lua中,过签名验证也很麻烦,而且lua也加密了,换个思路思考他是如何获取签名验证的,资料我有点记不得了,大概意思就是,第三方如lua、dll等文件获取签名,基本上都要传入一个context,在java中获取签名可以这样写,在c++(ndk)中基本上也是这个方法利用反射调用getPackageManager(),同时也需要一个context,利用上面的我给的插件可以直接定位,定位到方法之后,向上追查查看那个方法传入的context 直到getApplicationContext()或者activityPackageInfopackageInfo=context.getPackageInfo("packagename",PackageManager.GET_SIGNATURES); Signature[]signs = packageInfo.signatures;
而context的可以是通过getApplicationContext()获取,或者通过activity获取,java有个特点”继承“在我们写的actitiy中都是继承自Activity,在Activity源码中并没有发现getPackageManager()这个方法,接着向上找最终在我们写的activity的祖父类ContextWrapper中找到方法getPackageManager()方法也就是,说如果我们在我们写的activiy中有getPackageManager()这个方法,他就不会在去找,曾祖父中的方法了,思路就在这,在activity中自己写一个getPackageManager()这样第三方在调用签名的时候,直接调用我们的getPackageManager()而不会调用曾祖父类中的getPackageManager()下面是是我写的一个getPackageManager(),可以在这里Lcom/happyelements/android/BaseActivity插入.method public getPackageManager()Landroid/content/pm/PackageManager; .registers 3 .prologue .local p0, "this":Lcom/example/hook/MainActivity;, "Lcom/example/hook/MainActivity<Treturn_type;>;" new-instance v0, Lcom/example/hook/MypackageManger; invoke-super {p0}, Landroid/app/Activity;->getPackageManager()Landroid/content/pm/PackageManager; move-result-object v1 invoke-direct {v0, v1}, Lcom/example/hook/MypackageManger;-><init>(Landroid/content/pm/PackageManager;)V return-object v0 .end method
总结:自己在写个getPackageManager()方法以及重写packageInfo和PackageManager,这个这些的文件我不提供了,可以自己写一个签名文件验证,重新打包文件你会发现。App无法运行着时候,用原来的签名文件又可以运行,如何欺骗app签名文件验证,偶然在http://blog.avlyun.com/date/2015/06/看到一篇文章,
讲到android签名加密算法,有三种DSA,RSA,EC,根据系统源码可以看出,在安装apk的时候系统首先是对DSA文件进行验证的,而且只验证一次从上面系统部分的源码可以看出来而消消乐的签名算法是通过RSA签名,并且会对这个文件验证,根据上面的思路,可以尝试用DSA算法进行签名,再把原来的RSA签名文件放到META-INF目录下(签名的时候不会对META-INF目录下文件进行签名)当然有能力的大神可以值pacth掉这个地方,、
这样DSA算法可以让apk文件正常安装,RSA文件可以过消消乐的内部文件验证。详细介绍下如何签名:cmd生成密匙keytool -genkey -v -keyalg DSA -keysize 1024 -sigalg SHA1withDSA-validity 20000-keystore MyDevel.keystore -alias devel -keypass MyDevel -storepass MyDevel签名:jarsigner-verbose -sigalg SHA1withDSA -digestalg SHA1-keystore myDevel.keystore -storepass MyDevel test.apk devel到此验证就完成了。可以愉快的破解了
ps:,更新了下破解版的 可以尝试下这个的思路,
本人博客:xiaobaiyey.com
插件下载地址:更新了下附上SignatureUtil.lua的脚本
**** Hidden Message *****
插件下载地址:更新了下附上SignatureUtil.lua的脚本
本帖最后由 oujiwei520 于 2016-4-14 16:24 编辑
先支持一下!下载安装了消消乐,刚刚买了一个6块钱的试试水!点的取消提示购买成功,风车比以到账!晚点打10010问问看!如果扣费了我就来砰 {:1_912:} 如果没有以后楼主每帖我必到!不管发的什么东西必须点赞!{:1_912:}
啊啊啊啊!实测不行!显示充值成功!可是购买东西的时候提示风车币不足!退出重进风车币回复之前的个数!————————亲测!!!
PS:下面是截图!有图有真相!
{:301_978:}赶紧再添内容 赶紧的!更新! 支持一下啊 ,虽然看不懂 不明觉厉,先谢谢了 好厉害的说 赶快来看看 破解好麻烦。 小新专属, 发表于 2015-8-12 23:09
破解好麻烦。
可以用xposed pacth到掉系统签名验证 就不用搞签名验证了,但是pacth这样的版本发出去,{:301_997:},需要每个人都要 干掉系统签名验证 ,虽然破解者简单了,使用者 可就麻烦了 好牛 逼顶楼主