汇编插入语句 ■汇编语言编程很困难.求两个数的和比较容易,但对于 输入输出等非常困难. ■要了解处理器结构和操作系统,很复杂 ■汇编插入语句可以在熟悉的环境里进行 2022/11/8 Chen Kaiming Copyright 2007
2022/11/8 Chen Kaiming Copyright 2007 1 ■汇编语言编程很困难. 求两个数的和比较容易,但对于 输入输出等非常困难. ■要了解处理器结构和操作系统,很复杂 ■ 汇编插入语句可以在熟悉的环境里进行. 汇编插入语句
最简单的汇编插入语句形式(求两个数之和) main() int a=1: /声明变量a并赋值为1 int b=2; /1声明变量b并赋值为2 int c; /声明变量c,不对它进行初始化 //汇编插入语句的开始位置 -asm( MOV EAX,a 将变量a的值加载到EAX寄存器 MOV EBX,b:将变量b的值加载到EBX寄存器 ADD EAX, EBX;EAX与EBX相加,并将结果写入EAX MOC C, EAX将EAX的值传送到变量C /汇编插入语句的结束位置 //用常用的c语言函数printf输出 //变量c的值 printf("a+b=8x+号x-号xn",a,b,c): 2022/11/8 Chen Kaiming Copyright 2007
2022/11/8 Chen Kaiming Copyright 2007 2
方法:直接在内存中搜索用户输入的密码 ■由于各种复杂的原因,密码不可能会放在很容易找到的 地方,同时程序中也有非常多的字特串都很像密码串。 ■想法: 搜索原始密码很难,搜索用户输入的密码应该简单。 2022/11/8 Chen Kaiming Copyright 2007
2022/11/8 Chen Kaiming Copyright 2007 3 ■由于各种复杂的原因, 密码不可能会放在很容易找到的 地方, 同时程序中也有非常多的字符串都很像密码串。 ■想法: 搜索原始密码很难,搜索用户输入的密码应该简单。 方法1: 直接在内存中搜索用户输入的密码
方法:直接在内存中搜索用户输入的密码 ■工作过程: idag 运行程序。 输入“KPNC Kaspersky" 转idag调试方式,搜索XPNC Kaspersky字待 串。可找出多个位置,分析选择可能性最大的一个。 在相应位置处004295E0中设置断点 然后重新启动idag运行。 断点设置在检测调用语句之后的指令上。 退出匹配的进程/修正丁MP指令以及. 2022/11/8 Chen Kaiming Copyright 2007
2022/11/8 Chen Kaiming Copyright 2007 4 ■工作过程: idag 运行 程序。 输入“ KPNC Kaspersky” 转idag 调试方式, 搜索KPNC Kaspersky 字符 串。可找出多个位置,分析选择可能性最大的一个。 在相应位置处004295E0中设置断点 然后重新启动idag 运行。 断点设置在检测调用语句之后的指令上。 退出匹配的进程/修正JMP指令以及…… 方法1: 直接在内存中搜索用户输入的密码
输入密码的程序 for(;; { printf("Enter password:") fgets(&buff[O],PASSWORD_SIZE,stdin): if(strcmp(&buff[O],PASSWORD)) /"中斥"密码不匹配 printf("Wrong password\n"); else break; if (++count>3)return-1; 2022/11/8 Chen Kaiming Copyright 2007 5
2022/11/8 Chen Kaiming Copyright 2007 5 for( ; ; ) { printf("Enter password: "); fgets(&buff[0] , PASSWORD_SIZE, stdin); if (strcmp( &buff[0] , PASSWORD)) // "申斥"密码不匹配 printf("Wrong password\n"); else break; if (++count>3) return -1; } 输入密码的程序