人民的名义
人民的名义
人民的名义-抓捕赵德汉1-200
来道简单的逆向题目,学习一下,正好最近简学了下java
文档说明
本文作者:SwBack
创作时间:202-04-09 20:40:55
知乎:
CSD:
百度搜索: SwBack
来一道简单的逆向
下载下来的jar文件。
运行之后显示如下:
逆向查看源码发现三个文件
一个接口文件,两个java
内容分别
人民的名义
人民的名义-抓捕赵德汉1-200
来道简单的逆向题目,学习一下,正好最近简学了下java
文档说明
本文作者:SwBack
创作时间:202-04-09 20:40:55
知乎:
CSD:
百度搜索: SwBack
来一道简单的逆向
下载下来的jar文件。
运行之后显示如下:
逆向查看源码发现三个文件
一个接口文件,两个java
内容分别如下:
CheckInterface
该文件主要是定义了CheckInterface类,实现了checkPassword方法
package defpackage;/* renamed from: CheckInterface */
/* loaded from: reverse.jar: */
public interface CheckInterface {boolean checkPassword(String str);
}
CheckPassword
可以看到这个文件存在main
方法
main方法中通过(line) 进行判断密码是否正确,然后该方法是下面定义的 CheckInterface checkerObject = loadCheckerObject();
loadCheckerObject() 大概可以看到是通过解密ClassEnc
package defpackage;import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.InvalidKeyException;
import java.;
import BadPaddingException;
import Cipher;
import IllegalBlockSizeException;
import oSuchPaddingException;
import spec.SecretKeySpec;/* renamed from: CheckPassword */
/* loaded from: reverse.jar: */
public class CheckPassword extends ClassLoader {static String hexKey = bb2760cf264f8567d185008c10cf96;public static void main(String[] args) throws ClassotFoundException, InstantiationException, IllegalAccessException, IOException, oSuchAlgorithmException, oSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {CheckInterface checkerObject = loadCheckerObject();BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));while (true) {println(Enter password:);String line = stdin.readLine();if ((line)) {println(Well done, that is the correct password);(0);} else {println(Incorrect password);}}}private static CheckInterface loadCheckerObject() throws IOException, oSuchAlgorithmException, oSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, ClassFormatError, InstantiationException, IllegalAccessException {CheckPassword mycl = new CheckPassword();InputStream in = .getClass().getResourceAsStream(/ClassEnc);ByteArrayOutputStream bout = new ByteArrayOutputStream();byte[] bytes = new byte[512];while (true) {int len = in.read(bytes);if (len > -1) {bout.write(bytes, 0, len);} else {byte[] myClassBytesEnc = ();();SecretKeySpec secretKeySpec = new SecretKeySpec(hexStringToByteArray(hexKey), AES);Cipher decAEScipher = Cipher.getInstance(AES);decAEScipher.init(2, secretKeySpec);byte[] myClassBytes = decAEScipher.doFinal(myClassBytesEnc);CheckInterface passCheckObject = (CheckInterface) mycl.defineClass(null, myClassBytes, 0, myClassBytes.length).newInstance();return passCheckObject;}}}private static byte[] hexStringToByteArray(String s) {int len = s.length();byte[] data = new byte[len / 2];for (int i = 0; i < len; i = 2) {data[i / 2] = (byte) ((Character.digit((i), 16) << 4) Character.digit((i 1), 16));}return data;}
}
看到这里大概明白解题思路了.
但是逆向之后,他还有第三个文件.
CheckPass
package defpackage;import java.security.MessageDigest;
import java.;/* renamed from: CheckPass */
/* loaded from: reverse.jar: */
public class CheckPass implements CheckInterface {@Override // defpackage.CheckInterfacepublic boolean checkPassword(String input) {MessageDigest md5Obj = null;try {md5Obj = MessageDigest.getInstance(MD5);} catch (oSuchAlgorithmException e) {println(Hash Algorithm not supported);(-1);}byte[] bArr = new byte[40];md5Obj.update(input.getBytes(), 0, input.length());byte[] hashBytes = md5Obj.digest();return byteArrayToHexString(hashBytes).equals(fa7c647dca5a66cf8df95c2d59);}private static String byteArrayToHexString(byte[] data) {int i;StringBuffer buf = new StringBuffer();for (int i2 = 0; i2 < data.length; i2) {int halfbyte = (data[i2] >>> 4) & 15;int two_halfs = 0;do {if (halfbyte >= 0 && halfbyte <= 9) {buf.append((char) (48 halfbyte));} else {buf.append((char) (97 (halfbyte - 10)));}halfbyte = data[i2] & 15;i = two_halfs;two_halfs;} while (i < 1);}return ();}
}
可以直接看到,这里通过equals去判断输入字符的md5是否等于 fa7c647dca5a66cf8df95c2d59
我们通过cmd5进行解密.得到密码monkey99
看到密码输入正确.
所以flag就是 monkey99
上面在分析CheckPassword.java
的时候说是通过解密ClassEnc
进行校验的.
我们直接解压jar文件之后得到如下内容
然后我们根据CheckPassword.java
的算法写出解密脚本,得到的内容正是CheckPass
的内容
以下直接是大佬写过的脚本
import os
from Crypto.Cipher import AES
filename=ClassEnc
key = bb2760cf264f8567d185008c10cf96
key_bytes = bytes.fromhex(key)
aes = ((key_bytes), AES.MODE_ECB)
data = bytearray(os.path.getsize(filename))
with open(filename, rb ) as f: f.readinto(data) ()
decryption_data = aes.decrypt(data)
with open(filename_decryption, ba ) as f:f.write(decryption_data)
()
可以看到这里我运行之后生成的ClassEnc_decryption
逆向得到的内容和CheckPass
内容一模一样
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2024-01-10 12:18:01
推荐阅读
留言与评论(共有 17 条评论) |
本站网友 天津农业银行 | 15分钟前 发表 |
CheckInterface */ /* loaded from | |
本站网友 美容护肤小常识 | 7分钟前 发表 |
AES);Cipher decAEScipher = Cipher.getInstance(AES);decAEScipher.init(2 | |
本站网友 青云云计算 | 16分钟前 发表 |
input.length());byte[] hashBytes = md5Obj.digest();return byteArrayToHexString(hashBytes).equals(fa7c647dca5a66cf8df95c2d59);}private static String byteArrayToHexString(byte[] data) {int i;StringBuffer buf = new StringBuffer();for (int i2 = 0; i2 < data.length; i2) {int halfbyte = (data[i2] >>> 4) & 15;int two_halfs = 0;do {if (halfbyte >= 0 && halfbyte <= 9) {buf.append((char) (48 halfbyte));} else {buf.append((char) (97 (halfbyte - 10)));}halfbyte = data[i2] & 15;i = two_halfs;two_halfs;} while (i < 1);}return ();} } 可以直接看到 | |
本站网友 生姜红糖水 | 9分钟前 发表 |
16) << 4) Character.digit((i 1) | |
本站网友 闪电部队在前进 | 30分钟前 发表 |
InvalidKeyException | |
本站网友 安天天 | 24分钟前 发表 |
CheckInterface 该文件主要是定义了CheckInterface类 | |
本站网友 蜂王浆的吃法 | 2分钟前 发表 |
AES.MODE_ECB) data = bytearray(os.path.getsize(filename)) with open(filename | |
本站网友 郑州市橄榄城 | 30分钟前 发表 |
IllegalAccessException | |
本站网友 可行性研究报告编制依据 | 1分钟前 发表 |
ClassFormatError | |
本站网友 日照小区 | 30分钟前 发表 |
IllegalAccessException | |
本站网友 醋酸甲地孕酮 | 9分钟前 发表 |
oSuchPaddingException | |
本站网友 云端 | 11分钟前 发表 |
f.write(decryption_data) () 可以看到这里我运行之后生成的ClassEnc_decryption逆向得到的内容和CheckPass 内容一模一样 | |
本站网友 万科森林公园 | 20分钟前 发表 |
oSuchAlgorithmException | |
本站网友 上海南 | 23分钟前 发表 |
f.write(decryption_data) () 可以看到这里我运行之后生成的ClassEnc_decryption逆向得到的内容和CheckPass 内容一模一样 | |
本站网友 石家庄结婚 | 6分钟前 发表 |
40 | |
本站网友 鱼鳔的做法 | 11分钟前 发表 |
16) << 4) Character.digit((i 1) |