MegatronKing / StringFog

一款自动对字节码中的字符串进行加密Android插件工具
Apache License 2.0
1.67k stars 334 forks source link

咨询一个gradle的技术问题这个问题解决了就可以做更深层次的加密 #23

Closed lozn00 closed 5 years ago

lozn00 commented 5 years ago

有一段时间拜读了大佬的源码,根据大佬玩gradle玩的很牛,我现在光用都不怎么会,更别说开发gradle插件了。 我现在 需要拦截源码编译的参数,拷贝原来源代码进行字符串加密操作,但是编译完之后不影响真正的源码。

类似这个修改了字节码,不影响真正的源码一样的道理。

我要做一个基于源码的字符串加密。

这种加密方式用处更加广泛 c字符串加密 ,java字符串加密 ,不过作者可能说这个c用c的一些混淆手段就好了,但是吧,有一个路子都不能错过,我还有一个想法是java的字符串资源直接抽取到c层的, 我可以弄成一个工具整,但是破坏了源码,还原回来就有点操蛋了,我现在只做了java的还原。

另外网上有一种加密java源码的 是通过拦截gradle的javaCompile这里的流程然后通过执行jar文件 直接读入classes目录然后进行asm修改.我个人觉得,他这个和您这个相比更容易自己定制,只需要拿到他那个jar包就可以轻松的修改再重新编译出来,反而容易上手一点。

lozn00 commented 5 years ago

我的意思就是扫描java源码字符串转换为byte数据 抽取到c层的源码data.c,在编译的时候有效,真正的源码并没有破坏,我需要知道具体gradle源码才能做,大不了hook java方法,拦截file读取拷贝副本,但是我不知道应该在什么时候拦截。

lozn00 commented 5 years ago

再说说java的字符串加密 目前开源的有: 直接反编译为smali然后进行字符串加密(用处不广泛) 通过asm 字节码操作class进行字符串加密(出错率低,稳定) 我开发的有: 基于源代码的加密和解密(不解密破坏了源代码自己看起来都累): 我这个只要封装的好,除了能对java外也能对其他语言进行加密。

MegatronKing commented 5 years ago

基于源码做加密解密,在日常开发的时候不友好,一般都是在编译的时候对字节码做处理,可以利用gradle插件的Transform做拦截处理,像java的混淆也是这么做的。把java的字符串抽到c层,技术上应该是可行的,主要难点就是自动生成c层的jni代码,然后编译进打包文件里面

lozn00 commented 5 years ago

嗯,混淆貌似也是用的asm把,感觉都不是基于源码,不过基于源码的优势也是有的,嘿嘿,只要产生一个源码副本让编译器去编译,就是友好了,这样其实也不叫破坏源码了。

所以大致思路就是利用gradle拦截编译源码过程,然后执行加密源码产生副本,让gradle去编译这个副本就行。 这样可以同时把c和java一起编译。

MegatronKing commented 5 years ago

我认为处理源码比处理字节码要难,后者有asm可以非常方便地处理

lozn00 commented 5 years ago

但是我确实已经弄好了