171020 逆向-Reversing.kr(Multiplicative)
来源:互联网 发布:ubuntu安装 虚拟机 编辑:程序博客网 时间:2024/06/05 22:19
1625-5 王子昂 总结《2017年10月20日》 【连续第385天总结】
A. reversing.kr
B.
Multiplicative
这次是JAVA题目,下载下来是仅有2KB的jar文件
感觉应该很简单?
解压缩出来一个MF文件,一个class文件
class里存放着java虚拟机执行用的字节码,所以其实java反编译起来相对而言应该是比较简单的
拖入惯用的jd-gui就打脸了
空空如也╮(╯_╰)╭
也不知道是我版本不对劲还是混淆还是天时地利人和不对
先试着运行一下吧,java虚拟机应该可以直接执行jar文件的,查了一下加上-jar参数就可以了:
哦~成功了
前边都是介绍,最后一行说明输入参数为64位有符号整数
那么输入范围应该是-2^63 ~ 2^63咯
然而我还是不知道内部运算是啥嘛~
查了一下字节码的反编译,发现有javap这个自带的工具可用,加上-c参数可以得到反汇编:
这样终于得到汇编啦……挺像smali的吼,虽然我已经把以前看的smali都忘了233
复制下来,大概浏览了一下,前面部分的常量都是介绍文字的输出,可以从注释中看出来
关键部分在这里:
读入long类型的数,乘26729后与-1536balabala比较,要求相等
记事本中的l和1是相同的,简直要瞎了我的狗眼……long类型的数字最后加L,这个坑浪费了我不少时间QAQ
另外,-1536balabala是有符号数,无符号的值是2^64 - 1536balabala,即
(Win10计算器大法好)
于是拿这个数除以26729就好啦~
嗯?这个小数点是怎么回事儿,这可不是个64位的有符号整数啊
除不尽说明啥?
说明真正的乘积不是这个-1536balabala呀,java的long类型只能保存64位,更高位由于溢出就丢失咯
那么我们就穷举被丢失的位呗,脚本跑一下:
i = 1while(1): k = i * (2**64) + 0xEAAEB43E477B8487 if(k % 26729 == 0): print(k//26729) break else: i += 1
瞬间得到数字:9468659231510783855
输入以后程序还是提示64位有符号数,说明这东西超出范围,应该是个负数咯
那么将print处的代码修正一下:
print('-%d'% (2**64 - k//26729))
这样就得到转换的负数啦
提交,完成
另外在复盘的时候从http://invicsfate.cc/的WP中了解到了新的好使的反编译工具–jad和dj~
下载了jad,反编译出来好读多了QAQ:
函数也清晰了,数字的L也大写了,命令也直白了,溢出的有符号数还被转成十六进制无符号数了~简直太清爽了~为我浪费的时间默哀OTZ
PS:今天跳过了CRC1,因为以前@zbnysjwsnd8让我提前看过,算法很简单,就是CRC64,权值是很常见的类型,但是并不会逆求啊(╯‵□′)╯︵┻━┻
费了很大的功夫才理解了CRC的算法和查表法,查到了反构的资料http://blog.csdn.net/sugar13/article/details/51029312,但是理解起来很困难。
之前一直抱着想要理解透再自己写算法的想法
最后想通了(:з」∠)数学编码学密码学不是我能触及的,乖乖站在巨人的肩膀上用查到的资料和算法解题吧……
C. 明日计划
reversing.kr
CRC反构
- 171020 逆向-Reversing.kr(Multiplicative)
- 170923 逆向-Reversing.kr(MusicPlayer)
- 170925 逆向-Reversing.kr(Replace)
- 170926 逆向-Reversing.kr(ImagePrc)
- 170927 逆向-Reversing.kr(Position)
- 170928 逆向-Reversing.kr(Direct3D_FPS)
- 170929 逆向-Reversing.kr(Ransomware)
- 170930 逆向-Reversing.kr(Twist)
- 171001 逆向-Reversing.kr(WindowsKernel)
- 171002 逆向-Reversing.kr(AutoHotKey)
- 171003 逆向-Reversing.kr(CSHOP)
- 171010 逆向-Reversing.kr(PEPassword)
- 171011 逆向-Reversing.kr(HateIntel)
- 171013 逆向-Reversing.kr(AutoHotKey2)
- 171014 逆向-Reversing.kr(x64 Lotto)
- 171017 逆向-Reversing.kr(CSharp)
- 171018 逆向-Reversing.kr(Flash Encrypt)
- 171019 逆向-Reversing.kr(MetroApp)
- Template-Based 3D Model Fitting Using Dual-Domain Relaxation
- window 安装MongoDB 出现的exception:connect failed 异常
- 五 SparkMLlib,R实战 SVD分析
- MyBatis框架学习
- 洛谷P1373 小a和uim之大逃离(DP)
- 171020 逆向-Reversing.kr(Multiplicative)
- 进程间通信——管道(有名管道、无名管道)
- 李开复——人工智能领域的中坚力量
- 【Leetcode】【python】Sort Colors
- -webkit-font-smoothing:antialiased;属性
- beego配置
- selenium之Cookie的应用-取消Case耦合,依赖关系
- Ubuntu sudo nopasswd方法
- vmware ubuntu 16.04 guest 修复不能桌面大小自动调整和从宿主机复制粘贴的问题