本帖最后由 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.available()];
fileInputStream.read(b);
byte[] result=new byte[b.length];
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()或者activity PackageInfopackageInfo=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,这个这些的文件我不提供了,可以自己写一个 签名文件验证,
讲到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的脚本
SignatureUtil.rar
(985 Bytes, 下载次数: 178)
解密工具
消消乐jar解密加密工具.rar
(3.9 KB, 下载次数: 256)
hook插件
下载地址:链接:http://pan.baidu.com/s/1CYy5 密码:xzn1
破解版:移动用户可能有点问题,会提示数据异常
链接:http://pan.baidu.com/s/1qW7kLZY 密码:200r
|