圣天诺的虚拟机保护方式:关于那个巨大的二叉树

5个4000比特大状态置换算法的设计与分析 下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。 阅读详情
 

标 题:圣天诺的虚拟机保护方式:关于那个巨大的二叉树。。。。。 (5千字)
发信人:ljtt
时 间:2002-7-7 16:14:19
详细信息:

圣天诺的虚拟机保护方式:关于那个巨大的二叉树。。。。。

先说明一个结构:
CallStruct
{    WORD    key1;
    WORD    key2;
    DWORD    code;
};
这个结构共 8 个字节长,程序开始部分即取自该结构中的数据进行分析,从而进入不同的模块部分。
代码如下:

:004119A6 A194754000              mov eax, dword ptr [00407594]        <---注:地址 00407594 中保存的就是 CallStruct 结构的指针
:004119AB 8B0D94754000            mov ecx, dword ptr [00407594]
:004119B1 668B00                  mov ax, word ptr [eax]            <---取 key1
:004119B4 66A3A0754000            mov word ptr [004075A0], ax
:004119BA 668B5102                mov dx, word ptr [ecx+02]            <---取 key2
:004119BE 668915A4754000          mov word ptr [004075A4], dx
:004119C5 8B4104                  mov eax, dword ptr [ecx+04]        <---取 code
:004119C8 A398754000              mov dword ptr [00407598], eax
:004119CD 011D94754000            add dword ptr [00407594], ebx
:004119D3 33C0                    xor eax, eax
:004119D5 66A1A0754000            mov ax, word ptr [004075A0]
:004119DB 3D42030000              cmp eax, 00000342                    <---判断 key1 从而进入不同的模块部分
:004119E0 7F13                    jg 004119F5
:004119E2 0F84C6010000            je 00411BAE
:004119E8 3DE4000000              cmp eax, 000000E4
:004119ED 0F8481010000            je 00411B74
:004119F3 EBB1                    jmp 004119A6

从以上可以看到 key1 用作代表不同的模块。进一步分析程序,可以分析得出其使用 00407590 、00407594 、00407598 这三个地址来用作数据传递的地址。以后我将其简称为 A 、B 、C 。

key1 的作用知道了,那么来了解一下 key2 的作用。分析可以发现 key2 是在某些模块内部(也就是说并非所有模块)用作取值方式的。
下面以分析 004116D0 处的模块为例:

其调用形式为:    CALL_004116D0(var1,var2)
当 key2 = 68 时,程序实现功能为: 返回 [var1] 的 Byte 字节。(注: [var1] 表示取 var1 地址中的值,以下类同)
当 key2 = D4 时,程序实现功能为: 返回 [[407590] + 4*var1] 的 DWORD 字节。
                (注:即 取407590地址中的值,然后加上4乘以var1的和,再取以"和"为地址的值,返回)

下面列举几个模块和 key2 的组合及相应实现的功能:

key2    模块名1                            模块名2                                模块名3
        4116D0                            411670                                411E1D
        功能:返回 eax                    功能:赋值                            功能:判断某些位是否不为0
68         byte [var1]                    [var1] <=  byte var3                if( [[407590]] & 0x000000FF <> 0 ) ok!
D4        dword [var1 * 4 + [407590]]        [var1 * 4 + [407590]] <= var3        if( [[407590]]              <> 0 ) ok!
234        dword [var1]                    [var1] <= dword var3                if( [[407590]]              <> 0 ) ok!
28E         word [var1]                    [var1] <=  word var3                if( [[407590]] & 0x0000FFFF <> 0 ) ok!
3D5            var1                        直接返回                            if( [[407590]]              <> 0 ) ok!

下面再来具体分析一下各个模块的功能及作用,列举如下:
为简化表达,把 4116D0 、411670  、411E1D 分别命名为 f1( )  、f2( ) 、f3( )
key1    模块起始地址    模块功能
0611    411BCA            类似 411E1D 模块,也会根据key2的值实现判断功能。只是 <> 变为 == 判断即可。
0704    411C1B            f2([407598],key2,f1([407598],key2))
1092    411C4F            [[407590]] += f1([407598],key2)
1109    411C72            [[407590]+4] = call_407598([[407590]+4],[[407590]]) , [407590] += 4
1992    411C9B            f2([407598],key2,[[407590]]) , [407590] += 4
1A44    411CC4            [407590] -= 4, [[407590]] = call_407598()
22B7    411D00            [[407590]] -= f1([407598],key2)
3345    411D23            [[407590]] &= f1([407598],key2)
5910    411FBA            [407594] <= [407598]
654D    411D9D            [[407590]] |= f1([407598],key2)
698A    411E00            f2([407598],key2,0)
7123    411E1D            判断
74BB    411E6E            [[407590]] ^= f1([407598],key2)    
9104    411ED1            [[407590]] *= f1([407598],key2)
AA61    411F2D            [[407590]+C] = call_407598([[407590]+C],[[407590]+8],[[407590]+4],[[407590]]), [407590] += 0xC
B323    411F5F            [[407590]+8] = call_407598([[407590]+8],[[407590]+4],[[407590]]), [407590] += 8    还原算法
BA51    411F8C            [[407590]] = call_407598([407590])
CDD3    411FC9            [[407590]+edi] = [407598] = f1([407598],key2)

归纳可以发现如下:

1、判断模块,分别实现不等跳转和相等跳转。
0611    411BCA            类似 411E1D 模块,也会根据key2的值实现判断功能。只是 <> 变为 == 判断即可。
7123    411E1D            判断

2、四则运算模块,分别实现加、减、乘、等运算。
74BB    411E6E            [[407590]] ^= f1([407598],key2)    
9104    411ED1            [[407590]] *= f1([407598],key2)
1092    411C4F            [[407590]] += f1([407598],key2)
22B7    411D00            [[407590]] -= f1([407598],key2)
3345    411D23            [[407590]] &= f1([407598],key2)
654D    411D9D            [[407590]] |= f1([407598],key2)

3、赋值模块,分别实现不同方式的赋值。
698A    411E00            f2([407598],key2,0)
0704    411C1B            f2([407598],key2,f1([407598],key2))
1992    411C9B            f2([407598],key2,[[407590]]) , [407590] += esi

4、调用函数模块,分别实现不同参数方式函数调用。
1A44    411CC4            [407590] += edi, [[407590]] = call_407598()
BA51    411F8C            [[407590]] = call_407598([407590])
1109    411C72            [[407590]+4] = call_407598([[407590]+4],[[407590]]) , [407590] += esi
AA61    411F2D            [[407590]+C] = call_407598([[407590]+C],[[407590]+8],[[407590]+4],[[407590]]), [407590] += 0xC
B323    411F5F            [[407590]+8] = call_407598([[407590]+8],[[407590]+4],[[407590]]), [407590] += ebx    还原算法

5、其他,实现数据的传递和控制程序流程。
CDD3    411FC9            [[407590]+edi] = [407598] = f1([407598],key2)
5910    411FBA            [407594] <= [407598]

最后说明一下:
这是以前自己分析圣天诺外壳时整理的一些记录。那个二叉树的各个分支就是用于识别各个伪机器码的。上面分析的就是各个伪机器码的作用,以及伪机器码的格式的。这个伪处理机只使用在圣天诺的最外层结构上,而进入核心部分还是和我们常见的程序没有什么区别。

如果你不了解圣天诺的这个伪处理机,那么从某些方面来说防止了暴破,因为我们常常会从弹出的对话框入手来找到程序的关键暴破点,但是这个壳中使用的伪处理机的判断部分是在伪处理机的一个用于进行"判断"的模块(实际上就是一条伪机器码)中,如果你不明白这其中的道理,把这个"判断"模块中的"JZ"语句修改了,就相当于把整个伪处理机中的"判断"模块修改了一样,想象一下如果我们把程序中所有的"JZ"指令改成"JNZ"的后果,这有些类似这个道理。

当然,也有有趣的地方,在其中一个早期版本的圣天诺外壳中,倒是程序中只使用了"JZ"判断模块,如果你把这个"判断"模块修改一下,会出现什么后果?这样伪处理机反而使暴破省事了。


  ©2000-2004 www.PEdiy.com  All rights reserved.
By
KanXue Studio

 

AI驱动的网络安全运维:智能化时代的安全保障 本项目旨在使用Python和AI技术构建一个智能化的网络安全运维系统,能够实时监测网络流量,检测潜在的安全威胁,并自动采取应对措施,从而提升网络安全管理的效率和准确性。具体内容包括:环境配置与依赖安装数据采集与预处理机器学习模型构建与训练实时威胁检测与响应实际应用案例通过本文的介绍,我们展示了如何使用Python和AI技术构建一个智能化的网络安全运维系统。 阅读详情

相关推荐

AIOps探索 | 如何用大模型构建高效运维知识及智能问答平台(1)

好久没有分享AIOps相关干货了,最近大模型这么火,而且我们有客户已经基于大模型构建了知识及智能问答平台,需要在运维领域结合使用场景进行应用。为此,楼主从头到尾声梳理了一遍大模型在运维领域构建知识及智能问答平台的应用场景、技术实现,总结出来供大家一同探索,希望对大家理解和运用大模型有一定帮助~

智能运维及数据中台探索 2810

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 192

Gradient Accumulation 梯度累加/梯度累积 (Pytorch)

我们在训练神经网络的时候,batch_size的大小会对最终的模型效果产生很大的影响。一定条件下,batch_size设置的越大,模型就会越稳定。batch_size的值通常设置在 8-32 之间,但是当我们做一些计算量需求大的任务(例如语义分割、GAN等)或者输入图片尺寸太大的时候,我们的batch size往往只能设置为2或者4,否则就会出现 “CUDA OUT OF MEMORY” 的不可抗力报错。 那么如何在有限的计算资源的条件下,训练时采用更大的batch size...

hxxjxw的博客 5805

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 298

使用autodl服务器运行CasMVSNet以及使用colmap产生的数据

MVSNet学习

qq_44708206的博客 3274

vite打包文件如何支持files协议,支持双击即可打开网页,支持electron打包文件。

原本的所需框架为vite + element-plus项目,需要打包之后用eletron打包为桌面应用。但遇到一个问题,耗费了整整一下午时间。vite的配置也没有考虑过纯静态页面的情况。打包之后的页面只支持https协议。不断是百度以及问AI然后看vite官网文档,最后终于配置好了。这里有一个问题就是上面箭头所指位置,不支持跨域,也是es6的语法也不支持。配置完之后打包文件如下。

guiplan 1561

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 561

Android开发工程师面试问题与参考答案

这是一份Android开发工程师职位面试指南,主要针对自研OS开发岗位。岗位要求3年以上独立开发经验,熟悉Android平台UI设计、四大组件和Java基础。面试问题覆盖五大核心领域:基础知识、开发经验、技术深度、问题解决和性能优化。文章提供了典型面试问题及专业参考答案,帮助应聘者准备关键技术点,如多线程处理、HashMap与ConcurrentHashMap区别、Handler机制等。同时建议应聘者结合项目经验展示优化能力,并注意公司提供完善的薪酬福利和团队文化。

郑伟强dev的专栏 893

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 20

LVGL core group焦点分组管理(lv_group.c)

lv_group_t是用于焦点管理的,将需要获取焦点的对像加入到同一个分组内,再将其通过挂到指定的事件驱动中,就可以控制焦点了。而被加入的对象又可以通过焦点状态事件和事件来控制对象的焦点逻辑了。创建好的分组通过接口挂事件驱动中,这样就可以指定一个自定义的焦点分组了。;) {if(!} }友情提示:无论是接口还是都是单例的,即被设置后前一个被设置的值就失效了;此方案可以保证焦点的唯一 性,但也一定要记住要在适合的位置设置回来,以防丢失焦点。

Bigan(安)的博客 3907

提示工程ROI计算模板:架构师私藏Excel表(含自动计算)

花3个人力优化提示词,到底能带来多少实际收益?“这个提示工程项目值得做吗?投入10万成本,多久能回本?“不同LLM应用的提示词优化优先级怎么排?全凭经验拍脑袋?当前90%的企业在提示工程投入上缺乏标准化的量化评估方法,导致资源浪费(盲目投入无回报项目)或错失机会(低估高价值优化点)。ROI = (总收益 - 总成本) / 总成本 × 100%对于提示工程,总成本=显性成本+隐性成本,总收益=直接收益+间接收益(后文会详细拆解)。提示工程的价值不是“玄学”,而是可以用数据量化的投资行为。本文分享的。

AI开发架构师 1073

C语言程序设计题|有序数组插入数字冒泡排序

题目要求将一个数插入有序数组末尾,并用冒泡排序实现整体升序。代码先将输入数存入数组最后位置,再通过双重循环进行冒泡排序,每轮将较大元素向后移动,最终输出11个升序元素。该方法虽时间复杂度为O(n²),但符合题目要求,逻辑清晰,适合初学者理解排序原理。

2301_81429079的博客 745

YOLOv8改进策略【卷积层】| ECCV-2024 小波卷积WTConv 增大感受野,降低参数量计算量,独家创新助力涨点

本文记录的是利用模块优化的目标检测网络模型。的目的是在不出现过参数化的情况下有效地增加卷积的感受野,从而解决了在感受野扩展中的参数膨胀问题。本文将其加入到深度可分离卷积中,有效降低模型参数量和计算量,并二次创新C2f,使模块更好地捕捉低频特征,增强网络性能。Wavelet Convolutions for Large Receptive Fields小波卷积及其改进的实现代码如下: 四、创新模块 4.1 改进点1⭐ 模块改进方法:加入(第五节讲解添加步骤)。添加后如下:模块改进方法:基于的(第五节讲解添加

Limiiiing的博客 1092

【算法拾光】模拟|外观数列 + 数青蛙

本文总结两道模拟题解法:外观数列通过迭代统计连续数字个数生成下一项,关键在于处理末尾字符;数青蛙则模拟青蛙叫声“croak”状态转移,维护各阶段青蛙数量,记录最大并发数并确保全部完成。共性在于严格遵循流程、细致处理边界与非法情况,锻炼字符串遍历与状态管理能力。

wuqingyigexiaoba的博客 367

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

牛客周赛165C题(前后缀性质,递推,排序,枚举)

题目大意:给定长度为 `n` 的数组,选择 `k ∈ [1,n]`,将前 `k` 个元素整体翻转,后面的元素不变。要求操作后的整个数组非递减,统计满足条件的 `k` 的数量。题目链接:https://ac.nowcoder.com/acm/contest/141721/C。时间复杂度:O(nlogn)

2501_94316951的博客 170

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【数据结构-3】算法美学之降复杂度

在while循环的循环体内,首先用临时变量保存最后一个位置的数据,再通过for循环把所有元素往后移动一位,最后把tmp中保存的值放到下标为0的位置上去。方法二的思路是:创建新数组,让原数组中后k个数据移动到新数组中前面的位置,让原数组中前numsSize-k个数据移动到新数组中后面的位置,这。这段代码的思路是:三次逆置,第一次逆置前numsSize-k个数据,第二次逆置后k个数据,最后整体逆置。这篇博文分享一道解法不一的算法题,求解过程的目的在于降低算法的时间复杂度,题源力扣。,属于空间换时间的操作。

weixin_44218929的博客 81

算法61,判定是否为字符重排

两字符串能互为重排 ⇔。

sheshibenniaodan的博客 207

算法日常・每日刷题--<动态规划>32

给定严格递增的正整数数组,求最长斐波那契子序列长度。使用二维DP,dp[i][j]表示以arr[i]、arr[j]为最后两项的序列长度,初始化均为2。通过哈希表快速查找前一项target = arr[j] - arr[i],若存在且下标小于i,则状态转移:dp[i][j] = dp[k][i] + 1。遍历更新全局最大长度,最终若结果小于3则返回0。时间复杂度O(n²),空间复杂度O(n²)。

2503_92261635的博客 177

算法札记:几何分布在算法题UVA1262的运用

集卡问题求解核心:将集齐n种优惠券的过程分为n个阶段,每个阶段期望购买次数为 $ \frac{n}{k} $(k为剩余种类数),总期望为 $ n \cdot H_n $(调和数)。通过自洽方程推导单阶段期望,无需几何分布或无穷级数,逻辑清晰且适用于大一水平。例如,n=5时期望约11.42,非5。题目要求以带分数形式输出精确结果,算法上需累加分数并化简。

Keven_11的博客 320

不同的二叉搜索树

互不相同的二叉搜索树的种数,以 j (1<=j<=i)为头节点,左子树是 j-1 个数,右子树就是 i - (j - 1) -1 = i - j个数。所以dp[3] = dp[0] * dp[2] + dp[1] * dp[1] + dp[2] * dp[0]头1 = 左子树0节点 * 右子树2节点,二叉搜索树就是排序树,左子树<根节点<右子树,左右子树也满足左子树<根节点<右子树。头2 = 左子树1节点 * 右子树1节点。所以dp[i] += dp[j-1] * dp[i-j]个节点组成且节点值从。

qq_44721738的博客 150

考拉兹猜想 - 7

本文通过引入虚数单位重构Collatz猜想的迭代逻辑,指出偶数减半与奇数“乘3加1”的过程在虚数坐标下等价于归结操作。关键在于:乘3加1使奇数跃升至偶数,随后持续减半,而虚数单位代表“无限减1”,实现无限向有限的转化。无论初始值如何,减半始终主导,最终归结为4-2-1循环。该视角消解了正向思维中的速度竞争疑虑,证明归结是必然结果。

杨铸人的博客 39

SSL证书选RSA还是ECDSA:公钥算法、CA签名与兼容性怎么核对

申请SSL证书时,RSA和ECDSA该怎么选?先分清站点公钥算法、CA签名算法和TLS实际兼容性,再用隔离OpenSSL实验读取两类材料,核对申请、续期和部署交接,避免只看Signature Algorithm就选错。

谁呀!的博客 398

贪心题目:可以到达的最远建筑

为了到达尽可能远的建筑物,在将砖块替换成梯子时,应将高度差最大位置的砖块替换成梯子,此时剩余的砖块数量最多,如果将高度差较小位置的砖块替换成梯子,则剩余的砖块数量较少,能到达的最远建筑物下标不可能更大。开始向后面的建筑物移动,移动过程中维护优先队列存储正高度差,优先队列的队首元素是最大元素,每次遇到正高度差时优先考虑使用砖块,如果砖块数量不够则使用梯子替换最大高度差位置的砖块,直到砖块和梯子都使用完毕时,到达的建筑物即为最远建筑物。如果以最佳方式使用给定的梯子和砖块,返回可以到达的最远建筑物的下标。

stormsunshine的博客 170

从曲线到储层:Techlog/KAPPA 全流程算法、UltraLAB 选型与本地 AI 部署实战

以高频 CPU 保证交互,以充足内存承载多井与多任务,以 NVMe 打通项目和知识库 I/O,再按本地模型、上下文与并发配置 GPU。对 UltraLAB 用户而言,更合理的采购方式是带着真实项目做选型:一组典型井、一套完整解释模板、一个目标大模型、一次多人并发测试。用实测结果确定配置,才能把预算转化为解释效率,而不是闲置算力。软件模块、操作系统与许可条件以厂商当前正式说明为准;硬件建议需结合项目实测。AI 输出只能作为辅助证据,不能替代岩石物理与油藏工程专业审核。

wdf8088的博客 179

【Deep-OC-SORT 01】多轨迹算法Deep-OC-SORT源码分析

本工程基于Deep-OC-SORT核心模块,重构并适配了EmbeddingComputer(外观特征提取)、CMCComputer(相机运动补偿)与OCSort(主跟踪器)三类。前者实现整框/网格模式的特征提取与L2归一化;后者通过稀疏光流或SIFT匹配估计仿射变换,补偿相机运动;主跟踪器融合IoU、外观相似度与方向一致性,支持模块开关与自定义组件,实现高效多目标跟踪。

Jayson 博客 331

【Deep-OC-SORT 05】多轨迹算法Deep-OC-SORT-IoU代价与VDC方向一致性融合过程

本工程在DeepOcSort中实现三路融合关联:IoU(位置重叠)、VDC(速度方向一致性)与外观相似度,通过加权求和生成总相似度,取负作为匈牙利算法的代价。其中,VDC利用轨迹惯性方向与检测方向的点积判断运动一致性,抑制反向误匹配;外观分采用网格化余弦距离并结合动态权重AW,提升遮挡场景下的鲁棒性。支持关闭外观分支(--emb_off),且通过快路径优化加速多数帧处理。最终配对经IoU复核,确保位置合理性,有效减少密集场景下的ID切换。

Jayson 博客 334
上一篇: Regards Matt Pietrek
下一篇: P2P原理介绍
CryButNoTear
博客等级 码龄20年 6粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值