一个用Java写的烂CM
本帖最后由 WoShiXXX 于 2020-8-13 20:11 编辑因为算法原因,我无法提供成功截图,成功了会提示:“2333你居然对了”
我编译的环境是AdoptOpenJDK11
64位的地址:https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/11/jre/x64/windows/OpenJDK11U-jre_x64_windows_openj9_windowsXL_11.0.8_10_openj9-0.21.0.zip
所以,开始爆破吧{:301_997:}
LeadroyaL 发表于 2020-8-13 20:51
楼主,你能说说是什么心态吗?猜时间戳也能叫 CM?
public class CrackMe {
而且这个CM永远不会正确的……
Java里面判断字符串相等不能用==,而是应该用.equals
==的意思是判断指针(内存中的位置)是否相等,是否是同一个对象
而.equals才是判断字符串相等 这个直接修改 bytecode 就可以了:
上图中选中的 7 字节全部置 0,也就是改成 JVM 的 nop 指令。
楼主,你能说说是什么心态吗?猜时间戳也能叫 CM?
public class CrackMe {
static int i = (int)System.nanoTime();
static String stringi;
public CrackMe() {
}
public static void main(String[] var0) {
try {
System.out.println("请输入一个整数");
int var1 = System.in.read();
String var2 = Integer.toString(var1);
if (var2 == stringi) {
System.out.println("2333你居然对了");
} else {
System.out.println("不对啊");
}
} catch (IOException var3) {
var3.printStackTrace();
}
}
static {
stringi = i.makeConcatWithConstants<invokedynamic>(i);
}
}
虽然是JAVA程序员,但是表示这个我不敢言论。有可能楼主有什么想法我们没猜到而已。 其实作者都写清楚了,就是指定爆破的。 修改字节码后保存就可以了 LeadroyaL 发表于 2020-8-13 20:51
楼主,你能说说是什么心态吗?猜时间戳也能叫 CM?
public class CrackMe {
哈哈哈哈哈哈哈哈 算了不要嘲笑一个努力的孩子 string类型不能这样判断吧 你这个永远不会走到if中去的, LeadroyaL 发表于 2020-8-13 20:51
楼主,你能说说是什么心态吗?猜时间戳也能叫 CM?
public class CrackMe {
给点鼓励就好 莫打击
java基础语法都没有掌握