2016-03-31 15:10:50 aotony_1988 阅读数 1611
  • python数据分析与机器学习实战【2019新版】

    购买课程后,请扫码进入学习群,获取唐宇迪老师答疑 Python数据分析与机器学习实战教程,该课程精心挑选真实的数据集为案例,通过python数据科学库numpy,pandas,matplot结合机器学习库scikit-learn完成一些列的机器学习案例。课程以实战为基础,所有课时都结合代码演示如何使用这些python库来完成一个真实的数据案例。算法与项目相结合,选择经典kaggle项目,从数据预处理开始一步步代码实战带大家入门机器学习。学完该课程即可: 1.掌握Python数据科学工具包,包括矩阵数据处理与可视化展示。 2.掌握机器学习算法原理推导,从数学上理解算法是怎么来的以及其中涉及的细节。 3.掌握每一个算法所涉及的参数,详解其中每一步对结果的影响。 4.熟练使用Python进行建模实战,基于真实数据集展开分析,一步步完成整个建模实战任务。

    93971 人正在学习 去看看 唐宇迪

以下程序是0.11 Linux中的一段嵌入式汇编代码

#define __set_tssldt_desc(n, addr, type) \
__asm__ ("movw $104, %1\n\t" \
         "movw %%ax, %2\n\t" \
         "rorl $16, %%eax\n\t" \
         "movb %%al, %3\n\t" \
         "movb $"type ", %4\n\t" \
         "movb $0x00, %5\n\t" \
         "movb %%ah, %6\n\t" \
         "rorl $16, %%eax" \
         :
         :"a"(addr), "m"(*(n)), "m"(*(n+2)), "m"(*(n+4)), \
          "m"(*(n+5)), "m"(*(n+6)), "m"(*(n+7)) \
        )

我在用bochs 2.1.1版本debug的过程中,看到这段代码对应的实际执行的机器码及其反汇编代码如下:

000072c4: (                    ): mov dword ptr ss:[ebp+0xfffffffc], 0x1847c ; c745fc7c840100
000072cb: (                    ): mov eax, dword ptr ss:[ebp+0xfffffffc] ; 8b45fc
000072ce: (                    ): opsize mov word ptr [ds:0x5cd8], 0x68 ; 66c705d85c00006800
000072d7: (                    ): opsize mov [ds:0x5cda], ax ; 66a3da5c0000
000072dd: (                    ): ror eax, 0x10             ; c1c810
000072e0: (                    ): mov al, byte ptr [ds:0x5cdc] ; 8805dc5c0000
000072e6: (                    ): mov byte ptr [ds:0x5cdd], 0x89 ; c605dd5c000089
000072ed: (                    ): mov byte ptr [ds:0x5cde], 0x0 ; c605de5c000000
000072f4: (                    ): mov ah, byte ptr [ds:0x5cdf] ; 8825df5c0000
000072fa: (                    ): ror eax, 0x10             ; c1c810

两段代码的对应关系如下:

行数 嵌入式汇编 机器码的反汇编
1 “movw $104, %1\n\t” opsize mov word ptr [ds:0x5cd8], 0x68
2 “movw %%ax, %2\n\t” opsize mov [ds:0x5cda], ax
3 “rorl $16, %%eax\n\t” ror eax, 0x10
4 “movb %%al, %3\n\t” mov al, byte ptr [ds:0x5cdc]
5 “movb $”type “, %4\n\t” mov byte ptr [ds:0x5cdd], 0x89
6 “movb $0x00, %5\n\t” mov byte ptr [ds:0x5cde], 0x0
7 “movb %%ah, %6\n\t” mov ah, byte ptr [ds:0x5cdf]
8 “rorl $16, %%eax” ror eax, 0x10

我不太理解的地方是第4行和第7行的代码对应关系。
以第四行举例,嵌入式汇编是把寄存器al的值放入变量3对应的内存中,而从机器码的反汇编结果来看,像是把地址ds:0x5cdf中的值放入ah中。
但是我在单步执行的时候查看了寄存器eax,并未被改变,而ds:0x5cdc却被改变了,难道是反汇编的翻译错误?

搜到oldlinux的讨论,居然版主也不知道为什么有双向的赋值。。。。

我又用bochs 2.3.7版本进行debug,看到反汇编的代码如下:

000072c4: (                    ): mov dword ptr ss:[ebp+0xfffffffc], 0x0001847c; c745fc7c840100
000072cb: (                    ): mov eax, dword ptr ss:[ebp+0xfffffffc] ; 8b45fc
000072ce: (                    ): mov word ptr ds:0x5cd8, 0x0068 ; 66c705d85c00006800
000072d7: (                    ): mov word ptr ds:0x5cda, ax ; 66a3da5c0000
000072dd: (                    ): ror eax, 0x10             ; c1c810
000072e0: (                    ): mov byte ptr ds:0x5cdc, al ; 8805dc5c0000
000072e6: (                    ): mov byte ptr ds:0x5cdd, 0x89 ; c605dd5c000089
000072ed: (                    ): mov byte ptr ds:0x5cde, 0x00 ; c605de5c000000
000072f4: (                    ): mov byte ptr ds:0x5cdf, ah ; 8825df5c0000
000072fa: (                    ): ror eax, 0x10             ; c1c810

这段代码的反汇编结果已经被修正,看来是bochs 2.1.1反汇编时出错了

2019-03-23 22:33:41 fcglx 阅读数 231
  • python数据分析与机器学习实战【2019新版】

    购买课程后,请扫码进入学习群,获取唐宇迪老师答疑 Python数据分析与机器学习实战教程,该课程精心挑选真实的数据集为案例,通过python数据科学库numpy,pandas,matplot结合机器学习库scikit-learn完成一些列的机器学习案例。课程以实战为基础,所有课时都结合代码演示如何使用这些python库来完成一个真实的数据案例。算法与项目相结合,选择经典kaggle项目,从数据预处理开始一步步代码实战带大家入门机器学习。学完该课程即可: 1.掌握Python数据科学工具包,包括矩阵数据处理与可视化展示。 2.掌握机器学习算法原理推导,从数学上理解算法是怎么来的以及其中涉及的细节。 3.掌握每一个算法所涉及的参数,详解其中每一步对结果的影响。 4.熟练使用Python进行建模实战,基于真实数据集展开分析,一步步完成整个建模实战任务。

    93971 人正在学习 去看看 唐宇迪

使用点亮LED的简单程序分析其汇编码和机器码,通过直接修改bin文件中的机器码修改功能,点亮其他的LED灯。

首先修改Makefile文件把elf文件反汇编生成dis文件,查看其真正的汇编指令:

all:
	arm-linux-gcc -c -o Led_on.o Led_on.S
	arm-linux-ld -Ttext 0 Led_on.o -o Led_on.elf
	arm-linux-objcopy -O  binary -S  Led_on.elf Led_on.bin
	arm-linux-objdump -D Led_on.elf > Led_on.dis

clean:
	rm *.bin *.o *.elf

反汇编之后打开dis文件,真正的汇编指令:

Led_on.elf:     file format elf32-littlearm

Disassembly of section .text:

00000000 <_start>:
/*[第1行]*/   0:	e59f1014 	ldr	r1, [pc, #20]	; 1c <.text+0x1c>
/*[第2行]*/   4:	e3a00c01 	mov	r0, #256	; 0x100
/*[第3行]*/   8:	e5810000 	str	r0, [r1]
/*[第4行]*/   c:	e59f100c 	ldr	r1, [pc, #12]	; 20 <.text+0x20>
/*[第5行]*/  10:	e3a00000 	mov	r0, #0	; 0x0
/*[第6行]*/  14:	e5810000 	str	r0, [r1]

00000018 <halt>:
  18:	eafffffe 	b	18 <halt>
  1c:	56000050 	undefined
  20:	56000054 	undefined

在汇编指令中,最右边是汇编码,中间是机器码,最左边是地址。

                                                                

在cpu中有27个寄存器,其中16个可以使用,如上图所示,最右边一列是寄存器的别名。其中pc为Program counter程序计数器,当把一个地址写入此寄存器中时,程序就跳到此地址中去。lr是link register链接寄存器,用来保存返回地址,当程序执行完后调回到这个地址。sp是stack point栈指针寄存器。

程序解析过程说明:

/*[第1行]*/   0:    e59f1014     ldr    r1, [pc, #20]    ; 1c <.text+0x1c> 在这一行程序中,当前指令地址为0,pc为当前指令地址加8,所以r1 = 0 + 8 + 20 = 28 = 0x1c,但是为什么是加8?因为在ARM系统中cpu是以流水线(ARM内核使得执行效率更加高)的方式进行工作的,即当前执行地址A的指令,那么cpu已经在对地址A+4的指令进行译码,同时已经在读取地址A+8的指令,这里A+8就是pc的值。所以在下边已经给出了0x1c地址的值就是56000050,赋给r1。

/*[第2行]*/   4:    e3a00c01     mov    r0, #256    ; 0x100  在这一行中,mov指令将立即数0x100赋给r0

/*[第3行]*/   8:    e5810000     str    r0, [r1]   在这一行将0x100写入r1对应的内存
/*[第4行]*/   c:    e59f100c     ldr    r1, [pc, #12]    ; 20 <.text+0x20> 在这一行中pc等于当前地址加8,所以r1=pc + 12 = 0xc + 8 + 12 =32=0x20,所以下边已经给出此地址的值为56000054,读取出来赋给r1。
/*[第5行]*/  10:    e3a00000     mov    r0, #0    ; 0x0 在这一行中将立即数赋给r0。
/*[第6行]*/  14:    e5810000     str    r0, [r1] 在这一行将0写入r1对应的内存

编译器将汇编码转换为机器码,这个机器码就是bin文件的内容。如果想将点亮的第一个LED灯换成第二个,经过查阅手册将GPFCON赋值改为0x400,可以通过修改汇编程序然后编译链接,但是也可以通过修改机器码来实现,就是修改第二行的MOV指令对应的机器码,首先查阅MOV指令机器码存储结构。

                              

e3a00c01     mov    r0, #256

e3a00c01的位: 

bit15~bit12用来表示r0,bit11~bit0用来表示赋值的数值立即数。其中bit11~bit8表示高四位rotate,剩下的是低8位immed_8。而立即数 = immed_8循环右移(2 * rotate)位。

根据上图rotate是12,所以是1循环右移24位得到0..(23)..100000000也就是立即数0x100

但是如果是立即数是0x400,怎么使用rotate和immed_8表示呢,将0x400展开是0..(21)..100 0000 0000数一下0的个数可知道是1循环右移22位得到,所以ratate=22/2=11,rotate为0b1011,所以12位立即数为1011 0000 0001,所以直接修改机器码e3a00c01为e3a00b01即可解决问题。

 

 

 

 

 

 

 

2019-12-26 22:20:08 qq_38232378 阅读数 14
  • python数据分析与机器学习实战【2019新版】

    购买课程后,请扫码进入学习群,获取唐宇迪老师答疑 Python数据分析与机器学习实战教程,该课程精心挑选真实的数据集为案例,通过python数据科学库numpy,pandas,matplot结合机器学习库scikit-learn完成一些列的机器学习案例。课程以实战为基础,所有课时都结合代码演示如何使用这些python库来完成一个真实的数据案例。算法与项目相结合,选择经典kaggle项目,从数据预处理开始一步步代码实战带大家入门机器学习。学完该课程即可: 1.掌握Python数据科学工具包,包括矩阵数据处理与可视化展示。 2.掌握机器学习算法原理推导,从数学上理解算法是怎么来的以及其中涉及的细节。 3.掌握每一个算法所涉及的参数,详解其中每一步对结果的影响。 4.熟练使用Python进行建模实战,基于真实数据集展开分析,一步步完成整个建模实战任务。

    93971 人正在学习 去看看 唐宇迪

由于要在PE文件中修改代码,本质上是在改十六进制的机器码(shellcode为经过处理的机器码),而我们阅读的是汇编码,汇编码和机器码相互转化可以更好的修改程序。本来想用pwn toolOllyDbg来转化,但通过搜索linux的调试工具,radare2有附加的工具来转化。

(1) radare2安装
apt install radare2

Windows下载地址:http://radare.mikelloc.com/list,下载zip包,install的安装后无法使用,这边使用radare2-msvc_64-3.9.0.ziphttps://github.com/radareorg/radare2/releases/tag/3.2.1有32/64位的zip包。
github:https://github.com/radareorg/radare2/issues/12799

ra+TAB显示相关的命令:

rabin2.exe    radiff2.exe   ragg2.exe     ranlib.exe    rasautou.exe  raserver.exe  rasphone.exe
radare2.exe   rafind2.exe   rahash2.exe   rarun2.exe    rasdial.exe   rasm2.exe     rax2.exe
(2) 转化
rasm2 -L    #查看architectures
rasm2 -a x86 -b 32 'mov eax, 33'    #转机器码
echo 'push eax;nop;nop' | rasm2 -f -   

rasm2 -a x86 -d 55  #转汇编 push ebp
(3) radare2使用

radare2用于静态分析,用radare2 -d C:\Windows\System32\notepad.exe来动态调试,但在windows上调试功能不完善,基本上无法调试。

radare2 静态分析

crackme程序下载:https://github.com/radareorg/radare2book/blob/master/crackmes/ioli/IOLI-crackme.tar.gz

分析符号

r2 -A crackme0x00.exe

r2命令行下用aaa(analyze)来分析

查看帮助:? a? d? i? p?

a = analyze

d = Debug|Display

i = info

p = print

查看函数

pdf @ main  #或地址

ii  #导入表
iE  #导出表

进入地址

s 0x00401303    #seek

查看二进制信息

iI

查看汇编码

pd 9    #前9行

查看寄存器

dr
dr eax

数值计算

? eax
? 0x00401260
? 0x45-12

计算汇编码

pa push ebp;    #汇编
paD 55          #反汇编 pad 55

计算hash

ph

图形界面

v   #q退出

环境变量

e asm.cpu=x86

c源码

pdc
(4) 快速进入radare2
radare2 -

修改内存

w a #写入字符
x   #查看hex x?=px?

wx 55 @ 0x01    #在0x01写入机器码55
x
pd 5    #查看前5行汇编码

wa push eip;    #写入汇编码

wb 00   #循环填充00 即全部清零
x
(5) radare2图形界面:cutter

cutter下载地址https://github.com/radareorg/cutter

cutter的UI用Qt5写,radare2成为库函数

打开cutter,在Windows\console可以打开r2命令行。由于终端经过IO重定向,如果使用v等死循环的命令时会卡UI。

(6) radare2附加的工具

rax2 数值计算

rax2 45+0x12
rax2 -s 4142    #AB
rax2 -S AB  #4142
rax2 -S < bin.foo

rafind2 查找

rafind2 -s lib /bin/ls  #search for a specific string
rafind2 -z /bin/ls  #search for zero-terminated strings

rarun2 环境变量设置

rabin2 文件属性

rabin2 -I /bin/ls   #info

radiff2 比较

rasm2 汇编|反汇编

rasm2 -L    #列出架构
rasm2 -a x86 -b 32 'mov eax, 33'    #汇编
rasm2 -a x86 -b 32 -d '90'  #反汇编

ragg2 构造注入

rahash2 哈希算法

rahash2 -a md5 -s "hello world"
rahash2 -B 1M -b -a sha256 /bin/ls
(7) 参考
2010-07-26 11:03:00 huangxiansheng1980 阅读数 1262
  • python数据分析与机器学习实战【2019新版】

    购买课程后,请扫码进入学习群,获取唐宇迪老师答疑 Python数据分析与机器学习实战教程,该课程精心挑选真实的数据集为案例,通过python数据科学库numpy,pandas,matplot结合机器学习库scikit-learn完成一些列的机器学习案例。课程以实战为基础,所有课时都结合代码演示如何使用这些python库来完成一个真实的数据案例。算法与项目相结合,选择经典kaggle项目,从数据预处理开始一步步代码实战带大家入门机器学习。学完该课程即可: 1.掌握Python数据科学工具包,包括矩阵数据处理与可视化展示。 2.掌握机器学习算法原理推导,从数学上理解算法是怎么来的以及其中涉及的细节。 3.掌握每一个算法所涉及的参数,详解其中每一步对结果的影响。 4.熟练使用Python进行建模实战,基于真实数据集展开分析,一步步完成整个建模实战任务。

    93971 人正在学习 去看看 唐宇迪

博客已搬家至360converter博客平台,此文链接:http://blog.360converter.com/archives/834

2012-01-31 08:32:31 panwuqiong 阅读数 948
  • python数据分析与机器学习实战【2019新版】

    购买课程后,请扫码进入学习群,获取唐宇迪老师答疑 Python数据分析与机器学习实战教程,该课程精心挑选真实的数据集为案例,通过python数据科学库numpy,pandas,matplot结合机器学习库scikit-learn完成一些列的机器学习案例。课程以实战为基础,所有课时都结合代码演示如何使用这些python库来完成一个真实的数据案例。算法与项目相结合,选择经典kaggle项目,从数据预处理开始一步步代码实战带大家入门机器学习。学完该课程即可: 1.掌握Python数据科学工具包,包括矩阵数据处理与可视化展示。 2.掌握机器学习算法原理推导,从数学上理解算法是怎么来的以及其中涉及的细节。 3.掌握每一个算法所涉及的参数,详解其中每一步对结果的影响。 4.熟练使用Python进行建模实战,基于真实数据集展开分析,一步步完成整个建模实战任务。

    93971 人正在学习 去看看 唐宇迪
objdump --disassemble --show-raw-insn filename 这样可以把汇编和机器码一起打印
没有更多推荐了,返回首页