Allatori破解
源代码:https://github.com/lqs1848/AllatoriCrack
根据 https://www.52pojie.cn/thread-622023-1-1.html 做了一些改进
帖子里面没有具体代码 没有具体实现 QAQ
还要求在ubuntu下反编译
实际操作了一下,要求在ubuntu环境下主要是因为 windows 目录不区分大小写 Allatori 都是 iIIii 大小写的i混合的文件名
那用 zip 操作即可
具体流程为:
zip 读取Allatori.jar 找到所有的class
使用 javassist 读取class的字节码
判断这个类是否有 THIS_IS_DEMO_VERSION_NOT_FOR_COMMERCIAL_USE 方法
然后替换这个方法的返回值
String 返回值的解密全部条件都带上判断即可
但是要移除
System.out.println()
1 | ################################################ |
全部都操作完
简单项目ok
复杂项目加密出错…
查看了一下加密信息
很多的类出现了方法名称重复
大概就是比较长的类
原来是有一个
ALLATORIXDEMO方法
还有一个随机英文大小写字符 的方法
1 | m.insertAfter(" if ($_!=null&&!$_.isEmpty()&&$_.equals(\"ALLATORIxDEMO\")) {\n" +"$_ = \"qtfreet00\";\n" +"}"); |
按 qtfreet00 的做法 过滤返回参数是 ALLATORIxDEMO 应该就是可行的 但是不知道为什么 一样被替换了
打印方法入参进行对比
第一行是参数
第二行是返回值
依次交替
(Lcom/mysd/common/utils/MapCache;Ljava/lang/Object;J)V
(Lcom/mysd/common/utils/MapCache;Ljava/lang/Object;J)V
c.m.common.utils.i&&(Lcom/mysd/common/utils/MapCache;Ljava/lang/Object;J)V
(Lcom/mysd/common/utils/MapCache;Ljava/lang/Object;J)V
(Lcom/mysd/common/utils/MapCache;Ljava/lang/Object;J)V
c.m.common.utils.i&ALLATORIxDEMO&Lcom/mysd/common/utils/MapCache;
null
c.m.common.utils.MapCache&AllatoriDecryptString&(Ljava/lang/String;)Ljava/lang/String;
null
c.m.common.utils.MapCache&keys&()Ljava/util/Set;
keys
c.m.common.utils.MapCache&put&(Ljava/lang/Object;Ljava/lang/Object;J)Ljava/lang/Object;
put
c.m.common.utils.MapCache&clear&()V
clear
c.m.common.utils.MapCache&get&(Ljava/lang/Object;Lcom/mysd/common/utils/Callable;)Ljava/lang/Object;
get
c.m.common.utils.MapCache&reSize&()V
reSize
c.m.common.utils.MapCache&get&(Ljava/lang/Object;JLcom/mysd/common/utils/Callable;)Ljava/lang/Object;
get
c.m.common.utils.MapCache&put&(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
put
c.m.common.utils.MapCache&ALLATORIxDEMO&(Lcom/mysd/common/utils/i;)Z
null
c.m.common.utils.MapCache&remove&(Ljava/lang/Object;)V
remove
c.m.common.utils.MapCache&get&(Ljava/lang/Object;)Ljava/lang/Object;
get
c.m.common.utils.MapCache&ALLATORIxDEMO&(Ljava/lang/String;)Ljava/lang/String;
ALLATORIxDEMO
c.m.common.utils.MapCache&contains&(Ljava/lang/String;)Z
contains
c.m.common.utils.MapCache&size&()I
size
c.m.common.utils.MapCache&&()V
c.m.common.utils.MapCache&ALLATORIxDEMO&Lcom/mysd/common/utils/MapEx;
null
c.m.common.utils.i&ALLATORIxDEMO&Lcom/mysd/common/utils/MapCache;
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.i&&(Lcom/mysd/common/utils/MapCache;Ljava/lang/Object;J)V
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&ALLATORIxDEMO&Lcom/mysd/common/utils/MapEx;
ALLATORIxDEMO
c.m.common.utils.MapCache&AllatoriDecryptString&(Ljava/lang/String;)Ljava/lang/String;
F
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&keys&()Ljava/util/Set;
keys
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&put&(Ljava/lang/Object;Ljava/lang/Object;J)Ljava/lang/Object;
put
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&clear&()V
clear
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&get&(Ljava/lang/Object;Lcom/mysd/common/utils/Callable;)Ljava/lang/Object;
get
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&reSize&()V
reSize
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&get&(Ljava/lang/Object;JLcom/mysd/common/utils/Callable;)Ljava/lang/Object;
get
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&put&(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
put
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&ALLATORIxDEMO&(Lcom/mysd/common/utils/i;)Z
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&remove&(Ljava/lang/Object;)V
remove
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&get&(Ljava/lang/Object;)Ljava/lang/Object;
get
c.m.common.utils.MapCache&ALLATORIxDEMO&(Ljava/lang/String;)Ljava/lang/String;
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&contains&(Ljava/lang/String;)Z
contains
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&size&()I
size
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&&()V
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&ALLATORIxDEMO&(Ljava/lang/String;)Ljava/lang/String;
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&AllatoriDecryptString&(Ljava/lang/String;)Ljava/lang/String;
F
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&ALLATORIxDEMO&(Ljava/lang/String;)Ljava/lang/String;
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&ALLATORIxDEMO&(Ljava/lang/String;)Ljava/lang/String;
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&AllatoriDecryptString&(Ljava/lang/String;)Ljava/lang/String;
F
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&AllatoriDecryptString&(Ljava/lang/String;)Ljava/lang/String;
F
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&ALLATORIxDEMO&(Ljava/lang/String;)Ljava/lang/String;
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&ALLATORIxDEMO&(Ljava/lang/String;)Ljava/lang/String;
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&AllatoriDecryptString&(Ljava/lang/String;)Ljava/lang/String;
F
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&ALLATORIxDEMO&(Ljava/lang/String;)Ljava/lang/String;
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.i&ALLATORIxDEMO&Lcom/mysd/common/utils/MapCache;
ALLATORIxDEMO
Lcom/mysd/common/utils/MapCache;
null
(Lcom/mysd/common/utils/MapCache;Ljava/lang/Object;J)V
null
Lcom/mysd/common/utils/MapCache;
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&ALLATORIxDEMO&(Ljava/lang/String;)Ljava/lang/String;
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&ALLATORIxDEMO&(Ljava/lang/String;)Ljava/lang/String;
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&AllatoriDecryptString&(Ljava/lang/String;)Ljava/lang/String;
F
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&ALLATORIxDEMO&(Ljava/lang/String;)Ljava/lang/String;
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&ALLATORIxDEMO&(Ljava/lang/String;)Ljava/lang/String;
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&ALLATORIxDEMO&(Ljava/lang/String;)Ljava/lang/String;
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&AllatoriDecryptString&(Ljava/lang/String;)Ljava/lang/String;
F
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&AllatoriDecryptString&(Ljava/lang/String;)Ljava/lang/String;
F
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.i&&(Lcom/mysd/common/utils/MapCache;Ljava/lang/Object;J)V
(Lcom/mysd/common/utils/MapCache;Ljava/lang/Object;J)V
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&reSize&()V
reSize
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&put&(Ljava/lang/Object;Ljava/lang/Object;J)Ljava/lang/Object;
put
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&get&(Ljava/lang/Object;)Ljava/lang/Object;
get
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&ALLATORIxDEMO&(Lcom/mysd/common/utils/i;)Z
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&ALLATORIxDEMO&Lcom/mysd/common/utils/MapEx;
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&get&(Ljava/lang/Object;JLcom/mysd/common/utils/Callable;)Ljava/lang/Object;
get
(Lcom/mysd/common/utils/MapCache;Ljava/lang/Object;J)V
null
Lcom/mysd/common/utils/MapCache;
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&ALLATORIxDEMO&(Ljava/lang/String;)Ljava/lang/String;
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&AllatoriDecryptString&(Ljava/lang/String;)Ljava/lang/String;
F
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&ALLATORIxDEMO&(Ljava/lang/String;)Ljava/lang/String;
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&ALLATORIxDEMO&(Ljava/lang/String;)Ljava/lang/String;
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&ALLATORIxDEMO&(Ljava/lang/String;)Ljava/lang/String;
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
com/mysd/common/utils/MapCache
null
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache
[INFO] Obfuscation completed. Writing log file…
c.m.common.utils.i&ALLATORIxDEMO&Lcom/mysd/common/utils/MapCache;
ALLATORIxDEMO
c.m.common.utils.MapCache
c.m.common.utils.MapCache
c.m.common.utils.MapCache&ALLATORIxDEMO&(Lcom/mysd/common/utils/i;)Z
ALLATORIxDEMO
c.m.common.utils.MapCache&ALLATORIxDEMO&(Lcom/mysd/common/utils/i;)Z
“ s=”118” e=”118
c.m.common.utils.MapCache&ALLATORIxDEMO&(Ljava/lang/String;)Ljava/lang/String;
ALLATORIxDEMO
c.m.common.utils.MapCache&AllatoriDecryptString&(Ljava/lang/String;)Ljava/lang/String;
F
c.m.common.utils.MapCache&clear&()V
clear
c.m.common.utils.MapCache&clear&()V
“ s=”103” e=”107
c.m.common.utils.MapCache&contains&(Ljava/lang/String;)Z
contains
c.m.common.utils.MapCache&contains&(Ljava/lang/String;)Z
“ s=”6” e=”6
c.m.common.utils.MapCache&get&(Ljava/lang/Object;)Ljava/lang/Object;
get
c.m.common.utils.MapCache&get&(Ljava/lang/Object;)Ljava/lang/Object;
“ s=”22” e=”233
c.m.common.utils.MapCache&get&(Ljava/lang/Object;JLcom/mysd/common/utils/Callable;)Ljava/lang/Object;
get
c.m.common.utils.MapCache&get&(Ljava/lang/Object;JLcom/mysd/common/utils/Callable;)Ljava/lang/Object;
“ s=”47” e=”224
c.m.common.utils.MapCache&get&(Ljava/lang/Object;Lcom/mysd/common/utils/Callable;)Ljava/lang/Object;
get
c.m.common.utils.MapCache&get&(Ljava/lang/Object;Lcom/mysd/common/utils/Callable;)Ljava/lang/Object;
“ s=”115” e=”115
c.m.common.utils.MapCache&keys&()Ljava/util/Set;
keys
c.m.common.utils.MapCache&keys&()Ljava/util/Set;
“ s=”72” e=”72
c.m.common.utils.MapCache&put&(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
put
c.m.common.utils.MapCache&put&(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
“ s=”3” e=”3
c.m.common.utils.MapCache&put&(Ljava/lang/Object;Ljava/lang/Object;J)Ljava/lang/Object;
put
c.m.common.utils.MapCache&put&(Ljava/lang/Object;Ljava/lang/Object;J)Ljava/lang/Object;
“ s=”112” e=”210
c.m.common.utils.MapCache&reSize&()V
reSize
c.m.common.utils.MapCache&reSize&()V
“ s=”40” e=”190
c.m.common.utils.MapCache&remove&(Ljava/lang/Object;)V
remove
c.m.common.utils.MapCache&remove&(Ljava/lang/Object;)V
“ s=”71” e=”209
c.m.common.utils.MapCache&size&()I
size
c.m.common.utils.MapCache&size&()I
“ s=”132” e=”230
c.m.common.utils.MapCache&ALLATORIxDEMO&Lcom/mysd/common/utils/MapEx;
ALLATORIxDEMO
对比发现 入参带有 AllatoriDecryptString 的是返回 一个随机英文大小写字符
修改判断代码 $_ 前面加上 $1.indexOf("AllatoriDecryptString")
搞定收工