破解 jeb 2.3.7 demo
前言
使用的技术和上文的一样。
mips
版本的修改版
修改版:
https://gitee.com/hac425/jeb-mips
正文
安卓版
jeb-2.3.7.201710262129-JEBDecompilerDemo-121820464987384338
重新编译一个 com.pnfsoftware.jeb.client.Licensing
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.pnfsoftware.jeb.client;
import com.pnfsoftware.jeb.AssetManager;
import com.pnfsoftware.jeb.util.format.Strings;
import com.pnfsoftware.jeb.util.logging.GlobalLog;
import com.pnfsoftware.jeb.util.logging.ILogger;
import com.pnfsoftware.jebglobal.GN;
import com.pnfsoftware.jebglobal.mW;
public final class Licensing {
private static final ILogger logger = GlobalLog.getLogger(Licensing.class);
public static final String user_email = "love_lh@hac425.com";
public static final String user_group = "hacker";
public static final int user_id = 2116188757;
public static final String user_name = "hac425";
public static final int user_count = 20;
public static final int license_ts = 0;
public static final int license_validity = 40000;
public static int real_license_ts = 0;
public static int build_type = 0;
public static final int FLAG_AIRGAP = 8;
public static final int FLAG_ANYCLIENT = 16;
public static final int FLAG_COREAPI = 32;
public static final int FLAG_DEBUG = 1;
public static final int FLAG_FLOATING = 4;
public static final int FLAG_FULL = 2;
public static final int FLAG_JEB2 = 128;
static {
int v0 = Licensing.build_type | 2;
Licensing.build_type = v0;
v0 |= 4;
Licensing.build_type = v0;
v0 |= 8;
Licensing.build_type = v0;
v0 |= 16;
Licensing.build_type = v0;
v0 |= 32;
Licensing.build_type = v0;
Licensing.build_type = v0 | 128;
}
public Licensing() {
}
public static final void setLicenseTimestamp(int var0) {
real_license_ts = 1505267330;
}
public static final int getExpirationTimestamp() {
return real_license_ts + 345600000;
}
public static final int getBuildType() {
return build_type;
}
public static final boolean isDebugBuild() {
return true;
}
public static final boolean isReleaseBuild() {
return !isDebugBuild();
}
public static final boolean isFullBuild() {
return true;
}
public static final boolean isDemoBuild() {
return !isFullBuild();
}
public static final boolean isFloatingBuild() {
return (build_type & 4) != 0;
}
public static final boolean isIndividualBuild() {
return !isFloatingBuild();
}
public static final boolean isAirgapBuild() {
return (build_type & 8) != 0;
}
public static final boolean isInternetRequired() {
return false;
}
public static final boolean allowAnyClient() {
return (build_type & 16) != 0;
}
public static final boolean canUseCoreAPI() {
return true;
}
public static final String getBuildTypeString() {
StringBuilder var0 = new StringBuilder();
if (isReleaseBuild()) {
var0.append(mW.UU(new byte[]{-119, 23, 9, 9, 4, 18, 22, 74}, 1, 251));
} else {
var0.append(mW.UU(new byte[]{35, 1, 7, 23, 18, 72}, 1, 71));
}
if (isFullBuild()) {
var0.append(mW.UU(new byte[]{37, 26, 28, 21, 93}, 2, 39));
} else {
var0.append(mW.UU(new byte[]{39, 10, 29, 22, 93}, 2, 200));
}
if (isFloatingBuild()) {
var0.append(mW.UU(new byte[]{-114, 10, 3, 14, 21, 29, 7, 9, 72}, 1, 232));
} else {
var0.append(mW.UU(new byte[]{42, 1, 20, 16, 4, 0, 3, 29, 21, 76, 7}, 2, 150));
}
if (isAirgapBuild()) {
var0.append(mW.UU(new byte[]{34, 6, 2, 84, 21, 8, 23, 71}, 2, 100));
} else {
var0.append(mW.UU(new byte[]{8, 23, 20, 92, 68, 7, 26, 17, 23, 28, 11, 17, 91}, 1, 122));
}
if (allowAnyClient()) {
var0.append(mW.UU(new byte[]{82, 15, 23, 84, 78, 15, 5, 12, 11, 26, 91}, 1, 51));
} else {
var0.append(mW.UU(new byte[]{-85, 9, 0, 15, 10, 10, 8, 13, 65, 78, 15, 5, 12, 11, 26, 91}, 1, 196));
}
if (canUseCoreAPI()) {
var0.append(mW.UU(new byte[]{32, 0, 2, 28, 95, 8, 23, 1}, 2, 169));
} else {
var0.append(mW.UU(new byte[]{-27, 1, 66, 78, 12, 29, 23, 72, 76, 17, 25}, 1, 139));
}
return var0.toString();
}
public static String getLicense() {
byte[] var0 = AssetManager.UU("LICENSE.TXT");
return var0 == null ? null : Strings.decodeUTF8(var0);
}
public static String getChangeList() {
byte[] var0 = AssetManager.UU("CHANGELIST.TXT");
return var0 == null ? null : Strings.decodeUTF8(var0);
}
}
然后patch掉退出函数和更新检测
package me.hacklh;
import com.pnfsoftware.jeb.Launcher;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.CtNewMethod;
import com.pnfsoftware.jeb.client.Licensing;
public class JebCracker {
public static void main(String[] args) throws Exception {
// com.pnfsoftware.jeb.installer.Launcher.main(new String[]{"--di"});
// DES.main(args);
// Launcher.main(new String[]{"--generate-key"});
CtClass.debugDump = "./debugDump/";
System.out.println(Licensing.allowAnyClient());
/**
* 修改getStatus, AbstractContext会起几个线程修改status
*/
ClassPool pool = ClassPool.getDefault();
pool.importPackage("com.pnfsoftware.jeb.client.AbstractContext");
CtClass old_class = pool.get("com.pnfsoftware.jeb.client.AbstractContext");
old_class.detach();
CtMethod old_method = old_class.getDeclaredMethod
(
"getStatus",
new CtClass[]
{
}
);
old_method.setBody("return 0;");
old_method = old_class.getDeclaredMethod
(
"terminate",
new CtClass[]
{
}
);
old_method.setBody(";");
old_class.writeFile();
/**
* patch 掉与网络下载有关的函数,禁止升级
*/
pool = ClassPool.getDefault();
pool.importPackage("com.pnfsoftware.jeb.util.net.Net");
old_class = pool.get("com.pnfsoftware.jeb.util.net.Net");
old_class.detach();
old_method = old_class.getDeclaredMethod
(
"downloadBinary",
new CtClass[]
{
pool.get(String.class.getName())
}
);
old_method.setBody("return null;");
old_method = old_class.getDeclaredMethod
(
"httpPost",
new CtClass[]
{
pool.get(String.class.getName()),
pool.get(String.class.getName()),
pool.get(long[].class.getName())
}
);
old_method.setBody("return null;");
old_class.writeFile();
}
}
mips版
类似
最后
可以在jeb的官网下载其他平台的适配包
https://www.pnfsoftware.com/jeb2/support-package
破解 jeb 2.3.7 demo的更多相关文章
- java应用破解之破解 jeb mips 2.3.3
前言 jeb 的新版支持 mips的反编译 ,于是去官网申请一个试用版,试用版的限制还是比较多的,比如 使用时间验证,没法复制粘贴 等,于是想尝试看看能否破解,同时填了 java破解 这个坑. 修改版 ...
- 十二. 一步步破解JEB 2.0demo版二
编写脚本批量还愿JEB 加密字符串 解密完后效果如下: 脚本源码: https://github.com/bingghost/JebPlugins 思路: 下面的该封装的基本都封装了,过程如下: 1. ...
- 十一. 一步步破解JEB 2.0demo版一
字符串解密算法还愿 jeb.jar为核心功能,所以主要分析这个 1. jar转dex在使用jeb分析 Android\sdk\build-tools\23.0.3 dx.bat --dex --out ...
- 一个js破解教程
很好的一篇文章,先存着以后用到. 为了防止官网更新修复,存一下版本 https://pan.lanzou.com/b220073/ 密码:这是秘密 这篇文章以 JavaScript 为例讲解了破解的一 ...
- 十三. JEB破解三
一.启动环境 JEB 2.0Demo版本启动后出现这样一个界面 当前环境算出的许可证数据 48000000BDEAE192E4CEFC82B34C2AC67F3A85DF5C0E262E421772C ...
- 破解Demo
需要破解的程序界面如下: 需要破解的程序的主要代码如下: void CEasyCrackMeDlg::OnBnClickedButtonOk() { // TODO: 在此添加控件通知处理程序代码 T ...
- 微信web开发者工具、破解文件、开发文档和开发Demo下载
关注,QQ群,微信应用号社区 511389428 下载: Win: https://pan.baidu.com/s/1bHJGEa Mac: https://pan.baidu.com/s/1slhD ...
- Java 多线程 破解密码 demo
功能要求: 具体类: Decrypt 测试类,用来启动破解和日志线程 DecryptThread 破解线程类,用来生成测试的字符串,并暴力破解 LogThread 日志类,将输出每次生成的字符串结果 ...
- JEB 无源码调试 以dvm smali字节码方式,Demo尝试
关于调试器看不到进程,无法attach的问题,网上也有很多教程,基本是修改ro.debugable =1 ,ro.secure = 0 让adbd有root权限 attach到其他进程,涉及到要修改 ...
随机推荐
- 【CODECHEF】Children Trips 倍增
此题绝了,$O(n^{1.5}\ log\ n)$都可以过掉.... 题目大意:给你一颗$n$个点的树,每条边边权不是2就是$1$,有$m$个询问,每次询问一个人从$x$点走到$y$点,每天可以走的里 ...
- Rsync备份服务
一.Rsync 原理图 二.Rsync 原理描述 2.1:什么是Rsync Rsync是备份的一款软件,它可以实现全量备份.增量备份,也可以在不改变内容.属性的情况下进行同步备份,端口默认是873 2 ...
- POJ 2250
#include <iostream> #include <stack> #define MAXN 150 #include <string> using name ...
- Grid++Report——打印功能
一.安装下载 http://www.rubylong.cn/Download.htm 二.添加引用 三.添加类 四.制作打印模板 1.新增报表节 新增明细网格 新增列→设置为自由格→调整大小 报表→设 ...
- Java执行Shell脚本“No such file or directory” (win->Linux)异常的可能原因
转自:http://blog.csdn.net/zlpdaisy/article/details/6134314 用Runtime.getRuntime().exec()方法执行Linux的一个She ...
- Linux驱动:LCD驱动框架分析
一直想花时间来整理一下Linux内核LCD驱动,却一直都忙着做其他事情去了,这些天特意抽出时间来整理之前落下的笔记,故事就这样开始了.LCD驱动也是字符设备驱动的一种,框架上相对于字符设备驱动稍微复杂 ...
- Java之集合(二十五)ConcurrentHashMap
转载请注明源出处:http://www.cnblogs.com/lighten/p/7520808.html 1.前言 本章介绍使用的最频繁的并发集合类之一ConcurrentHashMap,之前介绍 ...
- CentOS命令行界面与图形界面切换(图文详解)
不多说,直接上干货! Ctrl + Alt +F1,到图形界面 Ctrl + Alt +F2,到命令行界面 欢迎大家,加入我的微信公众号:大数据躺过的坑 人工智能躺过的坑 同 ...
- 给访问私有变量添加access method
class TestAccessPrivateVar{ private int a = 1; class MyInner{ /* synthetic final TestAccessPrivateVa ...
- PowerDesigner中利用数据库表反向生成PDM(jdk必须是32位)
第一步:创建一个空的PDM模型(选择对应的DBMS):File-->New 第二步:选择DataBase-->Configure Connections,配置即将连接的数据库 第三步:选择 ...