- numi介绍
numi是一款记事本类型的计算器。
你可以在计算器中输入文本,后续为你进行计算。
2.numi在算法还原中的运用
我们在逆向过程中,经常静态分析代码,或者拿trace的文件根据寄存器的数值来推算某个寄存器的数值,那么会经常用到
10进制与16进制之间的相互转换
加减乘除、与、或、非、异或、左右移等逻辑运算
计算绝对偏移和相对偏移
等等。
这里可能有读者说其他计算器也可以完成,为什么非要用numi呢。
我们来做如下两点的对比
如果我们将80转化为16进制,在mac自带的计算器中,需要点击图中的16才可转换,转换后就看不到之前的值了
在numi中我们使用 80 in hex这条语句就得到了16进制的转换。
当然了还可以逆向转换
另一方面,自带计算器无法计算补码,在你还原算法的时候遇到一个负数,但是在结果中是补码的方式存在,这个时候,需要自己去逐步计算,这无疑浪费了很多宝贵的时间。
但“numi做的到吗”??
于是乎我翻遍了所有的官方文档,确实做不到。
那么此文到此终止!!!!!!!!!
又隔了一天,再看一遍文档,发现其可以给numi编写插件!!
官方给了个案例,比大小
实现代码为:
numi.addFunction({ "id": "nmin", "phrases": "nmin" }, function(values) {
return { "double": Math.min(...values.map(value => value.double)) };
});
numi.addFunction({ "id": "nmax", "phrases": "nmax" }, function(values) {
return { "double": Math.max(...values.map(value => value.double)) };
});
搜嘎,js的。。。
3.定制插件
那么我照虎画猫
思路,实现16bit和32bit的补码转原码的转换逻辑。
// numi-multi-bit-plugin.js
var pros = function processInteger(values, bitLength) {
// 假设输入是单个值
if (values.length !== 1) {
return { "error": "Invalid input length. Expected a single value." };
}
let v = values[0].double; // 获取输入值
let bitMask, signedBit;
switch (bitLength) {
case 16:
bitMask = 0xFFFF; // 16位掩码
signedBit = 0x8000; // 16位整数的符号位
break;
case 32:
bitMask = 0xFFFFFFFF; // 32位掩码
signedBit = 0x80000000; // 32位整数的符号位
break;
default:
return { "error": "Invalid bit length. Expected 16, 32, or 64." };
}
// 确保处理的是正确位数的整数
v = v & bitMask;
// 判断是否为负数
let result;
if ((v & signedBit) !== 0) {
let magnitude = (~v +1) & bitMask; // 计算绝对值
let negativeValue = -(magnitude & (bitMask >> 1)); // 添加负号
return {
"double": negativeValue
};
return result;
} else {
return {
"double": v
};
}
}
// 定义 16 位整数处理插件
numi.addFunction({ "id": "process16bit", "phrases": "process16bit" }, function(values) {
return pros(values, 16);
});
// 定义 32 位整数处理插件
numi.addFunction({ "id": "process32bit", "phrases": "process32bit" }, function(values) {
return pros(values, 32);
});
写完了,放到哪里呢?
放到这个插件目录下。
然后
总结:
上面的只是实现了一个求补码的原码的实现逻辑,其实扩展性蛮强的。。只要js能实现的逻辑都可以封装到此计算器里面。
原文始发于微信公众号(二进制科学):numi、逆向工程师必用的计算利器
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论