几个好友让分享一下拆解细节,所以就多写几句,备忘吧。
下述称crack的程序为标的
流程
- 粗暴的断网,删文件啥的让标的报错,捕获错误堆栈,方便获取混淆代码的调用栈
java.lang.RuntimeException: xx已损坏
at com.s.b.a.b(a.java:281)
at com.x.s.b.c.a(c.java:12)
at com.x.s.e.a.b(a.java:232)
at com.x.s.e.a.a(a.java:190)
at com.x.s.e.a.a(a.java:170)
at com.x.s.n.a(n.java:20)
- window上会有大小写不分的问题,引发jar包解压后,会覆盖文件。这块可以借助idea,方便查看
3.借助arthas等工具,jad内存中的class,方便静态查看
- 抓包分析标的和服务器的交互,http或者https拿下报文进行分析
- 分析完,该制作类似注册机的玩意。
5.1 拆解了加密算法的话,服务端模拟会比较方便,可以直接劫持http 模拟一个服务端;本地license的话,就直接生辰给一个即可
5.2 加解密如果搞不定,找脆弱链路,常规来说,都是一个复杂的加解密判断,最后给一个简单的 if语句或者函数,直接爆破这个函数即可 哈哈
javaassist
增加构造函数
CtNewConstructor.make修改方法
CtMethod.setBody增加方法
CtNewMethod.make
CtClass.addMethod增加 import
ClassPool.importPackage(增加 classpath
ClassPool.insertClassPath生成class 保存vm内存
CtClass.toClass()保存class到文件
CtClass.writeFile
arthas 的一些命令
- sc
- jad
反射
- 获取静态变量值
clz.getDeclareField();
setAccessible
field.get(X.class)
查找某个类加载于那个jar
java.security.ProtectionDomain pd = SpringBootApplication.class.getProtectionDomain();
java.security.CodeSource cs = pd.getCodeSource();
System.out.println(cs.getLocation());
耐心
耐心
耐心
心态这个比技术更重要 哈哈