numi、逆向工程师必用的计算利器

admin 2024年8月30日14:50:27评论94 views字数 1877阅读6分15秒阅读模式
numi、逆向工程师必用的计算利器
磨刀不误砍柴工,本文推荐一款计算器,并为此计算机开发插件,帮助我们在逆向分析时加快速度。

numi、逆向工程师必用的计算利器
⊙1.numi介绍

⊙2.numi在算法还原中的运用

⊙3.定制插件

  1. numi介绍

numi是一款记事本类型的计算器

numi、逆向工程师必用的计算利器

你可以在计算器中输入文本,后续为你进行计算。

2.numi在算法还原中的运用

我们在逆向过程中,经常静态分析代码,或者拿trace的文件根据寄存器的数值来推算某个寄存器的数值,那么会经常用到

10进制与16进制之间的相互转换

加减乘除、与、或、非、异或、左右移等逻辑运算

计算绝对偏移和相对偏移

等等。

这里可能有读者说其他计算器也可以完成,为什么非要用numi呢。

我们来做如下两点的对比

如果我们将80转化为16进制,在mac自带的计算器中,需要点击图中的16才可转换,转换后就看不到之前的值了

numi、逆向工程师必用的计算利器

在numi中我们使用 80  in hex这条语句就得到了16进制的转换。

numi、逆向工程师必用的计算利器

当然了还可以逆向转换

numi、逆向工程师必用的计算利器

另一方面,自带计算器无法计算补码,在你还原算法的时候遇到一个负数,但是在结果中是补码的方式存在,这个时候,需要自己去逐步计算,这无疑浪费了很多宝贵的时间。

但“numi做的到吗”??

于是乎我翻遍了所有的官方文档,确实做不到。

numi、逆向工程师必用的计算利器

那么此文到此终止!!!!!!!!!

又隔了一天,再看一遍文档,发现其可以给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.定制插件

那么我照虎画猫

numi、逆向工程师必用的计算利器

思路,实现16bit和32bit的补码转原码的转换逻辑。

// numi-multi-bit-plugin.jsvar 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);});

写完了,放到哪里呢?

numi、逆向工程师必用的计算利器

放到这个插件目录下。

然后

numi、逆向工程师必用的计算利器

numi、逆向工程师必用的计算利器

总结:

上面的只是实现了一个求补码的原码的实现逻辑,其实扩展性蛮强的。。只要js能实现的逻辑都可以封装到此计算器里面。

 

原文始发于微信公众号(二进制科学):numi、逆向工程师必用的计算利器

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月30日14:50:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   numi、逆向工程师必用的计算利器https://cn-sec.com/archives/3112443.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息