JEB 1.5.201408040(full) + keygen
发表于:
2015-7-27 12:51
34975
JEB 1.5.201408040(full) + keygen
2015-07-25 16:36 scz
关于JEB破解,我在看雪上发过两篇:
JEB(破解更新2014-07-16)
http://bbs.pediy.com/showthread.php?t=189980
用Javassis分析jeb.jar
http://bbs.pediy.com/showthread.php?t=190642
http://scz.617.cn/misc/201407301745.txt
发现Guest好像不能在看雪下载附件,又在网盘上放了一份:
jeb-1.5.201404100_modified_by_scz(20140711).7z
http://pan.baidu.com/s/1o6E6xLo
(把32-bits、64-bits的swt.jar一并打包进去)
有人问我有没有时间破解1.5.201503150(demo),他好像从哪儿下载了一份。我没时
间,也就没找他要这个版本,我不占人便宜的。后来再没有关注过JEB。
前段时间意大利的黑产公司Hacking Team被黑吃黑,听说被人偷出来的包里有正版
VMProtect、Themida,翻拣时无意中发现有1.5.201408040(full)版JEB。
full版的功能代码本身就是全的,只需要完成注册即可。破解demo版时,假设被调函
数的功能代码在binary中,只是被简单屏蔽,这种情况下,可以补充主调代码,使得
demo版变成full版。如果demo版的binary中完全没有被调函数的功能代码,那怎么破
解也不能变成full版。
最近一直在跟可能存在的一群APT程序员对抗,基本没时间看JEB的破解。周末想了想,
明日复明日、明日何其多、我生待明日、万事成蹉跎。一咬牙,花了两小时突击逆向
分析了一下HT的1.5.201408040(full),写keygen的思路切实可行。
JEB的注册机不是我开发的。最初是看雪的quard分享的,然后看雪的wangshy点了一
下要点,最后我跳出来狗尾续貂,提供可用的"1.5.201408040(full) keygen"。
tnttools@pediy的一句话:
献给那些永远充满着好奇心的人们
--------------------------------------------------------------------------
/*
* Copyleft (c) 2014, 2025
* -----------------------------------------------------------------------
* Author : quard@pediy
* : wangshy@pediy
* Maintain : scz
* Version : 1.5.201408040(full)
* Compile : javac -g keygen.java
* Run : java keygen
* :
* Create : 2014-04-23 17:01
* Modify : 2015-07-25 17:00
* -----------------------------------------------------------------------
* The only thing they can't take from us are our minds. !H
*/
--------------------------------------------------------------------------
JEB 1.5.201408040(full) keygen source code
http://scz.617.cn/misc/201507251700.txt
JEB 1.5.201408040(full) + keygen readme
http://scz.617.cn/misc/201507271722.txt
JEB 1.5.201408040(full) + keygen
http://pan.baidu.com/s/1o6y0e9s
最简执行方案:
$ java keygen
License key : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
注册成功后,用Wireshark抓包,得到1.5.201503152(full)版的下载链接,但其只有
4周有效期,现在已经无法下载。
http://www.pnfsoftware.com/dl?3a5f0e30e6375544
http://jebbuilds2.s3.amazonaws.com/3a5f0e30e6375544/jeb-1.5.201503152-full-ValerianoBedeschi-834390934.zip
(解压密码: dsfvdbvgummsyxvj)
所以,你们幻想中的1.5.201503152(full),我也没有。不知有没有愿意分享的?
此外,JEB2 DEMO版已出:
http://jebbuilds2.s3.amazonaws.com/jeb2demo/jeb2demo.zip
JEB2 DEMO版限制:
--------------------------------------------------------------------------
1. A 40-day demo trial period
2. Decompile between 80% and 90% of all methods
3. Copy/paste is disabled
4. Saving functionalities are disabled
5. All API access are disabled
6. Running time of a session is limited
--------------------------------------------------------------------------
1. 40天试用期
2. 部分方法(10%~20%)不予反编译
3. 不能复制文字
4. 不能保存结果数据
5. 不懂,是不是跟这句话相关:
Use JEB's API to write Python scripts and plugins
6. 运行一会儿(可能是1小时)后自动关闭
--------------------------------------------------------------------------
有时间了再来破解JEB2 DEMO版,未必可行。
对了,我从未用过JEB去破解Android软件,因为我完全不懂Android开发。
一般情况下,对于不相熟的人来说,我是尽最大可能分享,能分享的、愿分享的就直
接分享了,不搞什么"感兴趣的可以邮件联系我"之类的事。回过头来,没有直接分享
的,那就是不能、不愿分享的呗,这种私下找我也不会给。顺便说一句,破解与我而
言只是个人兴趣,实不擅长,诚不诚的都勿挠。有就赚,无则命。
我只是一名程序员。
/*
* Copyleft (c) 2014, 2025
* -----------------------------------------------------------------------
* Author : quard@pediy
* : wangshy@pediy
* Maintain : scz
* Version : 1.5.201408040(full)
* Compile : javac -g keygen.java
* Run : java keygen
* :
* Create : 2014-04-23 17:01
* Modify : 2015-07-25 17:00
* -----------------------------------------------------------------------
* The only thing they can't take from us are our minds. !H
*/
import java.io.*;
import java.lang.Runtime;
import java.util.Scanner;
import java.nio.*;
import java.security.*;
import java.math.*;
class keygen
{
private static String License_GetSerialNumber ()
{
String str1 = null;
Runtime localRuntime = Runtime.getRuntime();
Process localProcess;
try
{
String[] localObject1 = { "wmic", "bios", "get", "serialnumber" };
localProcess = localRuntime.exec( localObject1 );
}
catch ( IOException localIOException1 )
{
return( null );
}
OutputStream localOutputStream = localProcess.getOutputStream();
InputStream localInputStream = localProcess.getInputStream();
try
{
localOutputStream.close();
}
catch ( IOException localIOException2 )
{
return( null );
}
Scanner localObject1 = new Scanner( localInputStream );
try
{
String str2 = "SerialNumber";
while ( localObject1.hasNext() )
{
String str3 = localObject1.next();
if ( str2.equals( str3 ) )
{
str1 = localObject1.next().trim();
break;
}
} /* end of while */
localObject1.close();
}
finally
{
localObject1.close();
}
return( str1 );
} /* end of License_GetSerialNumber */
private static int License_sum ( int paramInt )
{
int i = 0;
while ( paramInt > 0 )
{
i += ( paramInt & 0xF );
paramInt >>= 4;
} /* end of while */
return( i % 10 );
} /* end of License_sum */
private static long License_GetMachineId ( String SerialNumber )
{
try
{
MessageDigest localMessageDigest = MessageDigest.getInstance( "MD5" );
localMessageDigest.update( SerialNumber.getBytes() );
byte[] arrayOfByte = localMessageDigest.digest();
ByteBuffer localByteBuffer = ByteBuffer.wrap( arrayOfByte );
localByteBuffer.order( ByteOrder.LITTLE_ENDIAN );
return( localByteBuffer.getLong() & 0xFFFFFFFF );
}
catch ( NoSuchAlgorithmException localNoSuchAlgorithmException )
{
throw new RuntimeException( localNoSuchAlgorithmException );
}
} /* end of License_GetMachineId */
private static long License_GetMachineId_2 ( long MachineId )
{
int i = ( int )( MachineId & 0xFFFFFFFF );
int j = ( int )( MachineId >> 32 & 0xFFFFFFFF );
int n = i + 376273029 + 287454020 & 0xFFFFFFFF;
int i1 = j - 52416167 + 1432778632 & 0x7FFFFFFF;
ByteBuffer buf = ByteBuffer.allocateDirect( 8 );
buf.putInt( i1 );
buf.putInt( n );
buf.rewind();
return( buf.getLong() );
} /* end of License_GetMachineId_2 */
private static String License_GenerateKey ( long MachineId, long time )
{
long l = License_GetMachineId_2( MachineId );
int t = ( int )time ^ 0x56739ACD;
return String.format( "%dZ%d%d", l, t, License_sum( t ) );
} /* end of License_GenerateKey */
public static void main ( String[] args )
{
String SerialNumber = License_GetSerialNumber();
long MachineId = License_GetMachineId( SerialNumber );
long time = System.currentTimeMillis() / 1000L + 86400 * 365 * 3 - 86400 * 13;
System.out.println("License key : " + License_GenerateKey( MachineId, time ) );
return;
} /* end of main */
} /* end of class keygen */
我提供的JEB Keygen是Windows版的,如果你在Linux或Mac OS X上,请自行修改License_GetSerialNumber()
这个函数。此时,关于如何找到SerialNumber,请参看我写的这篇:
用Javassis分析jeb.jar
http://scz.617.cn/misc/201407301745.txt
话说我曾经授人以渔过。
2015-07-28 17:59 scz
JEB 1.5.201408040(full) Python版注册机,作者:CodeColorist
https://gist.github.com/ChiChou/6a6427068965752c3c7b
http://scz.617.cn/misc/201507281725.txt
CodeColorist把Mac OS X的补上,我把Linux的补上。这个Python版JEB注册机同时支
持Windows、Darwin、Linux。区别就是取序列号不同:
wmic bios get serialnumber
ioreg -l
cat /var/lib/dbus/machine-id
#! /usr/bin/env python
# -*- coding: cp936 -*-
#
# Copyleft (c) 2014, 2025
# ------------------------------------------------------------------------
# Author : CodeColorist
# : https://gist.github.com/ChiChou/6a6427068965752c3c7b
# Original : quard@pediy
# : wangshy@pediy
# : scz
# : http://scz.617.cn/misc/201507251700.txt
# : http://scz.617.cn/misc/201507271722.txt
# : http://scz.617.cn/misc/201507281725.txt
# :
# Create : 2014-04-23 17:01
# Modify : 2015-07-28 17:25
# ------------------------------------------------------------------------
# The only thing they can't take from us are our minds. !H
#
import struct, time, hashlib, platform, re, subprocess
def License_GetSerialNumber () :
system = platform.system()
ctrl = \
{
'Windows' :
[
'wmic bios get serialnumber',
r'SerialNumber\s+(\S+)\s+'
],
'Darwin' :
[
'ioreg -l',
r'"IOPlatformSerialNumber" = "(\S+)"'
],
'Linux' :
[
'cat /var/lib/dbus/machine-id',
r'(\S+)'
]
}
if system in ctrl :
command, regular \
= ctrl[system]
p = subprocess.Popen \
(
command.split( ' ' ),
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE
)
out, err = p.communicate()
if not err :
return( re.search( regular, out, re.S ).group( 1 ) )
else:
raise Exception( "Failed to retrieve serial number.\n%s" % err )
else :
raise Exception( "OS not supported." )
#
# end of License_GetSerialNumber
# def License_sum ( val ) :
i = 0
while val > 0 :
i += ( val & 0xF )
val >>= 4
#
# end of while
#
return( i % 10 )
#
# end of License_sum
#
def License_GetMachineId ( SerialNumber ) :
md5 = hashlib.md5()
md5.update( SerialNumber )
digest = md5.digest()
return( struct.unpack( '<Q', digest[:8])[0] )
#
# end of License_GetMachineId
#
def License_GetMachineId_2 ( MachineId ) :
low = MachineId & 0xFFFFFFFF
high = MachineId >> 32
n = low + 376273029 + 287454020 & 0xFFFFFFFF
m = high - 52416167 + 1432778632 & 0x7FFFFFFF
buf = struct.pack( '>LL', m, n )
return( struct.unpack( '>Q', buf )[0] )
#
# end of License_GetMachineId_2
#
def License_GenerateKey ( MachineId, timestamp ) :
l = License_GetMachineId_2( MachineId )
t = timestamp & 0xFFFFFFFF ^ 0x56739ACD
return( '%dZ%d%d' % ( l, t, License_sum( t ) ) )
#
# end of License_GenerateKey
#
def main () :
SerialNumber = License_GetSerialNumber()
MachineId = License_GetMachineId( SerialNumber )
timestamp = int( time.time() + 86400 * 365 * 100 )
ret = \
"SerialNumber : %s\n" \
"MachineId : %x\n" \
"MachineId_2 : %x\n" \
"License key : %s" \
% \
(
SerialNumber,
MachineId,
License_GetMachineId_2( MachineId ),
License_GenerateKey( MachineId, timestamp )
)
print ret
#
# end of main
#
if __name__ == '__main__' :
main()
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
上传的附件: