易语言算法原理浅析【一】

注:

如果你看完了下面的文章。就来试试这个KeyGenMe吧,相信你能有所收获。

http://www.52pojie.cn/thread-540179-1-1.html

一、文章开头首先我们要贴上一段易语言代码,并且编译这段代码,从汇编角度分析易语言程序编译后,易语言算法在汇编中的实现过程。

.版本 2

.程序集 窗口程序集_启动窗口

.子程序 _按钮1_被单击
.局部变量 变量1, 整数型
.局部变量 变量2, 整数型
.局部变量 变量3, 整数型

变量2 = 1
变量3 = 2
变量1 = 变量2 + 变量3

  

为了便于理解,所有的变量我都用中文代替,当点击按钮后,创建三个局部变量,分别是变量1,变量2,变量3

变量2=1,变量3=2  最后计算 变量2+变量3 的值,将计算结果给变量1

二、我们编译此代码,生成为exe文件,编译方式采用静态编译,编译后的文件名为ReverseMe.exe

三、重头戏开始了,我们将ReverseMe.exe载入OllyDbg中,通过按钮事件FF 55 FC 5F 5E 定位到我们关键子程序位置

四、上面最后一张图就是我们关键函数的位置,除去函数头和函数尾,我们可以看出,核心代码如下。

五、通过上面的图可以看到一大堆fild fstp fld fild fadd之类的指令。很明显我们可以推测出,易语言程序就算是最简单的加减乘除,被编译后,汇编中都是采用浮点方式计算的。

下面我们对每句代码加上注释,便于理解。

注:下面两点是需要知道的小知识

1.OD中长得像[local.x]的指令,代表的就是易语言中的局部变量

2.fild,fstp等浮点指令,操作的都是浮点堆栈,也就是OD寄存器窗口中的ST0----ST7

六、通过上面的分析,我们看出,仅仅一个整数加法,易语言编译后在汇编干了这么大一堆事情,其实对于Cracker来说,很多汇编代码都是无用的。

下面我们将刚才的分析精简。今后看到此类浮点运算,就能秒识别他在干什么了。

  注:下面两点是需要知道的小知识

    1.看到此类浮点计算。找fild,有几个fild就有几个操作数,上面有两个fild,所以该代码操作数为[local.1]和[local.2],也就是变量1和变量2

2.找完fild,找运算指令,排除掉一切堆栈操作指令。就仅剩fadd,这个运算指令,也就是加法指令。

综上所述:

PS:今后看到这样的大段代码,是不是就不会懵逼了呢?

时间: 2024-10-05 04:40:33

易语言算法原理浅析【一】的相关文章

[转]易语言消息机制分析(消息拦截原理)

标 题: [原创]易语言消息机制分析(消息拦截原理)作 者: 红绡枫叶时 间: 2014-12-17,12:41:44链 接: http://bbs.pediy.com/showthread.php?t=195626 我自己做了个易语言的sig签名,方便分析的时候用.易语言例子是静态编译的.版本 5.11易语言其实是基于mfc的,它依然需要mfc的消息派发机制,只不过,自己当了系统与用户间的代理人.所有的消息都要经它转发而已.我在MFC的消息派发函数_AfxDispatchCmdMsg下断点,总

易语言高速去重复,精易微凉“吃尾”算法

易语言去数组去重复,精易论坛微凉 吃尾"算法  万条数据0.2秒 一直再找这种命令,很多思路都是大数据机器吃不消的. 有了这个就会好很多 这个是去除数组2的重复的命令 ======================================= .版本 2 .计次循环首 (取数组成员数 (数组2), i) .如果真 (取数组成员数 (数组2) < i) 跳出循环 () .如果真结束 .变量循环首 (取数组成员数 (数组2), i + 1, -1, i2) .如果真 (数组2 [i] =

C语言 选择排序算法原理和实现 从数组中 找出最小的元素然后交换位置

#include <stdio.h> int main(void) { /* 选择排序算法 原理:从数组中 找出最小的元素然后交换位置: */ int a[10] = {9,5,10,7,2,3,1,6,8,4}; int i=0,j=0; int n = sizeof(a)/4; //外循环n-1轮 for(i=0;i<n-1;i++){ int pos = i;//始终指向最小的位置 for(j=i+1;j<n;j++){ if(a[j]<a[pos]){ pos = j

用简单直白的方式讲解A星寻路算法原理

很多游戏特别是rts,rpg类游戏,都需要用到寻路.寻路算法有深度优先搜索(DFS),广度优先搜索(BFS),A星算法等,而A星算法是一种具备启发性策略的算法,效率是几种算法中最高的,因此也成为游戏中最常用的寻路算法. 直入正题: 在游戏设计中,地图可以划分为若干大小相同的方块区域(方格),这些方格就是寻路的基本单元. 在确定了寻路的开始点,结束点的情况下,假定每个方块都有一个F值,该值代表了在当前路线下选择走该方块的代价.而A星寻路的思路很简单:从开始点,每走一步都选择代价最小的格子走,直到达

易语言开发人工智能自动写文章软件!逆天了

我们今天要给大家分享一款可以自动写原创文章的软件,是我自己开发的,开发原理其实很简单,对接了网上某人工智能平台的API,实现了自动写文章的功能! 软件使用的文章渲染算法也是基于:乔姆斯基转换-生成语法进行生成的,效果还是不错!通过这个软件,你每天生成上万篇文章应该是不在话下,而且是原创的哦!软件的实现功能用的是易语言!我们先来抓包吧!数据我们已经抓包了,下面做的就是把数据封包到易语言子程序里面!我们已经把抓包到的数据已经封装到了易语言的子程序里面,然后通过"调试输出"成功返回正确的AP

Adaboost算法原理分析和实例+代码(简明易懂)

Adaboost算法原理分析和实例+代码(简明易懂) [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333     本人最初了解AdaBoost算法着实是花了几天时间,才明白他的基本原理.也许是自己能力有限吧,很多资料也是看得懵懵懂懂.网上找了一下关于Adaboost算法原理分析,大都是你复制我,我摘抄你,反正我也搞不清谁是原创.有些资料给出的Adaboost实例,要么是没有代码,要么省略很多步骤,让初学者

Kmeans聚类算法原理与实现

Kmeans聚类算法 1 Kmeans聚类算法的基本原理 K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一.K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类.通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果. 假设要把样本集分为k个类别,算法描述如下: (1)适当选择k个类的初始中心,最初一般为随机选取: (2)在每次迭代中,对任意一个样本,分别求其到k个中心的欧式距离,将该样本归到距离最短的中心所在的类: (3)利用

易语言调用csharp写的COM组件的程序在Win2008上奔溃的解决办法

易语言调用csharp写的COM组件,除了要注册csharp写的dll之外(由于是.net代码,需要用.net自带的注册工具RegAsm.exe注册,具体注册方法为: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe dotnet_lib.dll /tlb 这种调用的方法,在大部分的机器下捣鼓之后能成功,但是也有不成功的案例,具体表现如下: 一开始我以为是少了哪些dll,后来上百度,一找关键字“StackHash_0a9e”,还真能

Redis源码中的CRC校验码(crc16、crc64)原理浅析

在阅读Redis源码的时候,看到了两个文件:crc16.c.crc64.c.下面我抛砖引玉,简析一下原理. CRC即循环冗余校验码,是信息系统中一种常见的检错码.大学课程中的"计算机网络"."计算机组成"等课程中都有提及.我们可能都了解它的数学原理,在试卷上手工计算一个CRC校验码,并不是难事.但是计算机不是人,现实世界中的数学原理需要转化为计算机算法才能实现目的.实际上作为计算机专业背景人并不会经常使用或接触到CRC的计算机算法实现的原理,通常是电子学科背景的人士