- 浏览: 3049204 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (430)
- Programming Languages (23)
- Compiler (20)
- Virtual Machine (57)
- Garbage Collection (4)
- HotSpot VM (26)
- Mono (2)
- SSCLI Rotor (1)
- Harmony (0)
- DLR (19)
- Ruby (28)
- C# (38)
- F# (3)
- Haskell (0)
- Scheme (1)
- Regular Expression (5)
- Python (4)
- ECMAScript (2)
- JavaScript (18)
- ActionScript (7)
- Squirrel (2)
- C (6)
- C++ (10)
- D (2)
- .NET (13)
- Java (86)
- Scala (1)
- Groovy (3)
- Optimization (6)
- Data Structure and Algorithm (3)
- Books (4)
- WPF (1)
- Game Engines (7)
- 吉里吉里 (12)
- UML (1)
- Reverse Engineering (11)
- NSIS (4)
- Utilities (3)
- Design Patterns (1)
- Visual Studio (9)
- Windows 7 (3)
- x86 Assembler (1)
- Android (2)
- School Assignment / Test (6)
- Anti-virus (1)
- REST (1)
- Profiling (1)
- misc (39)
- NetOA (12)
- rant (6)
- anime (5)
- Links (12)
- CLR (7)
- GC (1)
- OpenJDK (2)
- JVM (4)
- KVM (0)
- Rhino (1)
- LINQ (2)
- JScript (0)
- Nashorn (0)
- Dalvik (1)
- DTrace (0)
- LLVM (0)
- MSIL (0)
最新评论
-
mldxs:
虽然很多还是看不懂,写的很好!
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩 -
HanyuKing:
Java的多维数组 -
funnyone:
Java 8的default method与method resolution -
ljs_nogard:
Xamarin workbook - .Net Core 中不 ...
LINQ的恶搞…… -
txm119161336:
allocatestlye1 顺序为 // Fields o ...
最近做的两次Java/JVM分享的概要
(以下内容不适合小盆友,请在老大哥指引下观看。实验危险,请不要在家尝试。)
hello.rb:
执行结果:看到beef
(得NS老兄的指示,可以宣传Bk201了:
上面用到的Bk201由night_stalker编写,可由github获取:http://github.com/LuiKore/bk201/tree/master
我用的是刚能运行的原型,现在在github上的是啥状况我还没看,所以具体用法可能跟我这帖里的有出入
Bk201需要配合Ruby 1.9使用。暂时不支持CRuby以外的实现。)
把第10行开头的注释去掉,插入一个断点。用OllyDbg打开ruby.exe hello.rb,运行,来到断点处。
(注意在OllyDbg主菜单的 选项->调试设置->异常->INT3中断,前面的勾要去掉不选,不然INT3中断会把程序带到Windows默认的中断处理函数里)
看到栈上内容是:
看栈顶,我没申请局部变量,这里EBP和ESP都指向0x0022FD58。于是:
1、([EBP + 0])老的栈帧指针
2、([EBP + 4])由call指令压到栈上的函数返回地址
下面可以看到生成的方法被调用的参数:
1、([EBP + 8])指向self的指针
2、([EBP + C])第一个显式参数,Fixnum
3、([EBP + 10])第二个显式参数,Fixnum
这印证了了把C函数注册为Ruby方法时,rb_method_define参数的argc为2时,所注册的函数签名应该与下述函数指针类型匹配:
谁调用了生成的代码?
继续观察前面例子中停在断点上的程序的函数调用栈,可以看到直接调用生成的代码的是call_cfunc(),它又是被vm_call_cfunc()所调用的。
vm_insnhelper.c:
上面两个函数都是Ruby 1.9虚拟机里关于方法调用的指令的实现。哪些指令会调用它们呢?
在vm.inc里匹配INSN_ENTRY(...),可以得知Ruby 1.9的虚拟机指令集有:
其中send与invokesuper指令的实现中使用了CALL_METHOD宏。该宏实现如下:
然后里面的vm_call_method()里调用了前面的vm_call_cfunc():
Well, okay. 看过实际运行中的栈的状况后,我比较有信心能写机器码里受栈影响的指令了……
嗯微软的DEP有硬件版和软件版。你看我在老笔记本上截的DEP设置的图就知道我这古董CPU不支持NX bit,所以用的DEP是软件版。
在Windows上用Ruby的人搞不好还没在Mac/Linux上用的人多……至少hardcore的人应该是在Linux上的多。嘛,回头有空倒是可以在我的Ubuntu上试试shellcode……不过听上了安全那门课的同学说他们有些实验得找很古老的GCC来能行(貌似是2.x的),新的GCC就已经会使得他们课上教的一些技巧用不了了……没上那门课,不知道他们老师讲了什么 XD
嘿嘿,NS老兄把家伙晒出来了~我把链接给加到帖里去
我接下来可能会有一段时间被断网,就在那个时候干点活儿吧
Windows XP是2001年发布的,而且从Windows XP SP2开始已经引入了DEP(微软的NX实现)。问题是XP上的DEP默认只是对Windows的关键程序和服务才启动的:
这是为了避免在XP上带来程序不兼容的问题,因为在启用DEP机制前很多程序可能只是普通的malloc()了空间就用来放动态生成的代码了(当然,包括shellcoder写的程序 XD)
所以从Vista开始,DEP和ASLR都默认启动,安全性就稍微提高了些,代价是兼容性就下降了。
MSVC里有/NOCOMPAT选项来让程序指定它无法兼容DEP,告诉操作系统不要对它启用DEP;这当然是以更容易被shellcode攻击为代价的。
Windows上的NX实现跟Linux上的出现时间差不多,没什么特别值得惊讶的地方 =v=
另外Windows/x86上的程序没有默认用EBP来保存返回地址的。EBP默认是用来保存FP的,也就是frame pointer,栈帧指针。FP只在需要动态大小的栈帧时才特别有意义;还有就是SEH(Structured Exception Handling)需要用EBP来保持栈帧指针。
x86的ret指令会从栈顶pop出一个DWORD,把它当作返回地址进行跳转。这跟寄存器没什么直接关系……
hello.rb:
require File.expand_path(File.dirname __FILE__) + '/../bk201.rb' def int2fix(i) i << 1 | 1 end class A extend Bk201::Asm asm_method :int, 'foo', 2 do |a| #a.code << "\xCC" # int3 a.code << "\xB8" << [ int2fix(0xBEEF) ].pack('I') # mov eax, 00017DDF end end puts '%x' % A.new.foo(3, 4)
执行结果:看到beef
(得NS老兄的指示,可以宣传Bk201了:
上面用到的Bk201由night_stalker编写,可由github获取:http://github.com/LuiKore/bk201/tree/master
我用的是刚能运行的原型,现在在github上的是啥状况我还没看,所以具体用法可能跟我这帖里的有出入
Bk201需要配合Ruby 1.9使用。暂时不支持CRuby以外的实现。)
把第10行开头的注释去掉,插入一个断点。用OllyDbg打开ruby.exe hello.rb,运行,来到断点处。
(注意在OllyDbg主菜单的 选项->调试设置->异常->INT3中断,前面的勾要去掉不选,不然INT3中断会把程序带到Windows默认的中断处理函数里)
看到栈上内容是:
地址 | 值 | 注释 ---------------------------------------------- 0022FD58 /0022FD74 ; 老的栈帧指针 0022FD5C |100208B4 ; 返回到 msvcr90-.100208B4 0022FD60 |00AB237C ; self 0022FD64 |00000007 ; Fixnum, value = 3 0022FD68 |00000009 ; Fixnum, value = 4 ---------------------------------------------- 0022FD6C |00A02CF8 ; 上一层函数保护的寄存器 0022FD70 |00A8FF90 ; 上一层函数保护的寄存器 0022FD74 /0022FD90 ; 老的老的栈帧指针
看栈顶,我没申请局部变量,这里EBP和ESP都指向0x0022FD58。于是:
1、([EBP + 0])老的栈帧指针
2、([EBP + 4])由call指令压到栈上的函数返回地址
下面可以看到生成的方法被调用的参数:
1、([EBP + 8])指向self的指针
2、([EBP + C])第一个显式参数,Fixnum
3、([EBP + 10])第二个显式参数,Fixnum
这印证了了把C函数注册为Ruby方法时,rb_method_define参数的argc为2时,所注册的函数签名应该与下述函数指针类型匹配:
VALUE (*)(VALUE self, VALUE arg1, VALUE arg2)
谁调用了生成的代码?
继续观察前面例子中停在断点上的程序的函数调用栈,可以看到直接调用生成的代码的是call_cfunc(),它又是被vm_call_cfunc()所调用的。
vm_insnhelper.c:
static inline VALUE call_cfunc(VALUE (*func)(), VALUE recv, int len, int argc, const VALUE *argv) { /* printf("len: %d, argc: %d\n", len, argc); */ if (len >= 0 && argc != len) { rb_raise(rb_eArgError, "wrong number of arguments(%d for %d)", argc, len); } switch (len) { case -2: return (*func) (recv, rb_ary_new4(argc, argv)); break; case -1: return (*func) (argc, argv, recv); break; case 0: return (*func) (recv); break; case 1: return (*func) (recv, argv[0]); break; case 2: return (*func) (recv, argv[0], argv[1]); break; /* ... */ case 15: return (*func) (recv, argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13], argv[14]); break; default: rb_raise(rb_eArgError, "too many arguments(%d)", len); break; } return Qnil; /* not reached */ } static inline VALUE vm_call_cfunc(rb_thread_t *th, rb_control_frame_t *reg_cfp, int num, ID id, ID oid, VALUE recv, VALUE klass, VALUE flag, const NODE *mn, const rb_block_t *blockptr) { VALUE val; EXEC_EVENT_HOOK(th, RUBY_EVENT_C_CALL, recv, id, klass); { rb_control_frame_t *cfp = vm_push_frame(th, 0, VM_FRAME_MAGIC_CFUNC, recv, (VALUE) blockptr, 0, reg_cfp->sp, 0, 1); cfp->method_id = oid; cfp->method_class = klass; reg_cfp->sp -= num + 1; val = call_cfunc(mn->nd_cfnc, recv, (int)mn->nd_argc, num, reg_cfp->sp + 1); if (reg_cfp != th->cfp + 1) { rb_bug("cfp consistency error - send"); } vm_pop_frame(th); } EXEC_EVENT_HOOK(th, RUBY_EVENT_C_RETURN, recv, id, klass); return val; }
上面两个函数都是Ruby 1.9虚拟机里关于方法调用的指令的实现。哪些指令会调用它们呢?
在vm.inc里匹配INSN_ENTRY(...),可以得知Ruby 1.9的虚拟机指令集有:
nop getlocal setlocal getspecial setspecial getdynamic setdynamic getinstancevariable setinstancevariable getclassvariable setclassvariable getconstant setconstant getglobal setglobal putnil putself putobject putspecialobject putiseq putstring concatstrings tostring toregexp newarray duparray expandarray concatarray splatarray checkincludearray newhash newrange pop dup dupn swap reput topn setn adjuststack defined trace defineclass send invokesuper invokeblock leave finish throw jump branchif branchunless getinlinecache onceinlinecache setinlinecache opt_case_dispatch opt_checkenv opt_plus opt_minus opt_mult opt_div opt_mod opt_eq opt_neq opt_lt opt_le opt_gt opt_ge opt_ltlt opt_aref opt_aset opt_length opt_succ opt_not opt_regexpmatch opt_regexpmatch opt_call_c_function bitblt answer
其中send与invokesuper指令的实现中使用了CALL_METHOD宏。该宏实现如下:
#define CALL_METHOD(num, blockptr, flag, id, me, recv) do { \ VALUE v = vm_call_method(th, GET_CFP(), num, blockptr, flag, id, me, recv); \ if (v == Qundef) { \ RESTORE_REGS(); \ NEXT_INSN(); \ } \ else { \ val = v; \ } \ } while (0)
然后里面的vm_call_method()里调用了前面的vm_call_cfunc():
static inline VALUE vm_call_method(rb_thread_t *th, rb_control_frame_t *cfp, int num, const rb_block_t *blockptr, VALUE flag, ID id, const rb_method_entry_t *me, VALUE recv) { VALUE val; start_method_dispatch: if (me != 0) { if ((me->flag == 0)) { normal_method_dispatch: switch (me->type) { /* ... */ case VM_METHOD_TYPE_CFUNC:{ val = vm_call_cfunc(th, cfp, num, recv, blockptr, flag, me); break; } /* ... */ default:{ rb_bug("eval_invoke_method: unsupported method type (%d)", me->type); break; } } } else { /* ... */ } } else { /* method missing */ } RUBY_VM_CHECK_INTS(); return val; }
Well, okay. 看过实际运行中的栈的状况后,我比较有信心能写机器码里受栈影响的指令了……
评论
8 楼
seen
2009-07-26
gcc2.9.5至今还在很多地方辛勤工作着 估计老师上课还得靠这个才能照顾到老的讲义
最晚从3.3.x之后就加入防shellcode的招数了 safeguard啥的
我估计那安全讲义啥的就是把00年左右的phrack倒腾出来的结果。。。
那些东西看了是能学不少东西 但是要系统地学肯定是不合适地
坦途还是让学生们扎扎实实学学操作系统的实现 再自己折腾下gdb 加几个自定义功能啥的 自然而然的heap/stack什么的都懂了
phrack这东西 有了基础再去看才好玩
扯远了。。。
最晚从3.3.x之后就加入防shellcode的招数了 safeguard啥的
我估计那安全讲义啥的就是把00年左右的phrack倒腾出来的结果。。。
那些东西看了是能学不少东西 但是要系统地学肯定是不合适地
坦途还是让学生们扎扎实实学学操作系统的实现 再自己折腾下gdb 加几个自定义功能啥的 自然而然的heap/stack什么的都懂了
phrack这东西 有了基础再去看才好玩
扯远了。。。
7 楼
RednaxelaFX
2009-07-25
seen 写道
另外NX也不是唯一手段 有些软的手段(不依赖于intel)我猜ms的编译器/库函数应该也加入了 至少那砣人不可能不知道 但是不知道出于什么原因(可能又是历史原因兼容原因)所以默认没有打开等等
不管怎么说在ms的地盘上玩shellcode是没什么意思的 主要原因是因为。。。。ms的console太丑陋了。。。
rb应该有linux的实现吧?建议到linux上去试试你的shellcode 我觉得应该会有不同结果
不管怎么说在ms的地盘上玩shellcode是没什么意思的 主要原因是因为。。。。ms的console太丑陋了。。。
rb应该有linux的实现吧?建议到linux上去试试你的shellcode 我觉得应该会有不同结果
嗯微软的DEP有硬件版和软件版。你看我在老笔记本上截的DEP设置的图就知道我这古董CPU不支持NX bit,所以用的DEP是软件版。
在Windows上用Ruby的人搞不好还没在Mac/Linux上用的人多……至少hardcore的人应该是在Linux上的多。嘛,回头有空倒是可以在我的Ubuntu上试试shellcode……不过听上了安全那门课的同学说他们有些实验得找很古老的GCC来能行(貌似是2.x的),新的GCC就已经会使得他们课上教的一些技巧用不了了……没上那门课,不知道他们老师讲了什么 XD
6 楼
seen
2009-07-24
另外NX也不是唯一手段 有些软的手段(不依赖于intel)我猜ms的编译器/库函数应该也加入了 至少那砣人不可能不知道 但是不知道出于什么原因(可能又是历史原因兼容原因)所以默认没有打开等等
不管怎么说在ms的地盘上玩shellcode是没什么意思的 主要原因是因为。。。。ms的console太丑陋了。。。
rb应该有linux的实现吧?建议到linux上去试试你的shellcode 我觉得应该会有不同结果
不管怎么说在ms的地盘上玩shellcode是没什么意思的 主要原因是因为。。。。ms的console太丑陋了。。。
rb应该有linux的实现吧?建议到linux上去试试你的shellcode 我觉得应该会有不同结果
5 楼
seen
2009-07-24
关于ebp的问题我说的太含糊了所以你误会了
这个跟编译器有关而不是操作系统
以前的老黑客们可以在overflow之后改ebp导致跳到自己的代码里去
后来glibc做了改进 在某些关键函数里 把ebp换成了esp
大概意思是这样:
譬如以前你要找第一个参数就是 0x8(%ebp)也就是$ebp+8
但现在是0xc(%esp)也就是$esp+10
这些关键函数就包括黑客们最爱用的exec系列
所以就不是改ebp这么简单就能跳到你指定的地址了
当然这招也是防君子不防小人的了 只要用ret来移动esp即可
因为ms是从编译器到库函数到操作系统通吃 所以这些事情ms做起来应该更顺手吧
虽然xp是老早出的 但基本上xp+sp2是另外一个release/distro了吧
这个跟编译器有关而不是操作系统
以前的老黑客们可以在overflow之后改ebp导致跳到自己的代码里去
后来glibc做了改进 在某些关键函数里 把ebp换成了esp
大概意思是这样:
譬如以前你要找第一个参数就是 0x8(%ebp)也就是$ebp+8
但现在是0xc(%esp)也就是$esp+10
这些关键函数就包括黑客们最爱用的exec系列
所以就不是改ebp这么简单就能跳到你指定的地址了
当然这招也是防君子不防小人的了 只要用ret来移动esp即可
因为ms是从编译器到库函数到操作系统通吃 所以这些事情ms做起来应该更顺手吧
虽然xp是老早出的 但基本上xp+sp2是另外一个release/distro了吧
4 楼
RednaxelaFX
2009-07-24
night_stalker 写道
广告一下:此 hello.rb 引用的 bk201 在 http://github.com/LuiKore/bk201/tree/master
这几天要拼命学 scala 没空去想很潮的东西鸟 … … (FX 靠你啦)
这几天要拼命学 scala 没空去想很潮的东西鸟 … … (FX 靠你啦)
嘿嘿,NS老兄把家伙晒出来了~我把链接给加到帖里去
我接下来可能会有一段时间被断网,就在那个时候干点活儿吧
3 楼
night_stalker
2009-07-24
广告一下:此 hello.rb 引用的 bk201 在 http://github.com/LuiKore/bk201/tree/master
这几天要拼命学 scala 没空去想很潮的东西鸟 … … (FX 靠你啦)
这几天要拼命学 scala 没空去想很潮的东西鸟 … … (FX 靠你啦)
2 楼
RednaxelaFX
2009-07-23
seen 写道
看了一系列你写的类似shellcode的帖子之后有个疑问:难道ms的os和编译器直到现在还允许运行栈上代码?还没有对内存检查NX bit?还没有保护ebp?还在用ebp来保存返回地址?还没有对栈进行保护?
这些早在03年fc1出来的时候就有了 而ms居然拖到vista才开始引进?
有了这些保护,要在栈上玩花样就麻烦不少了
这些早在03年fc1出来的时候就有了 而ms居然拖到vista才开始引进?
有了这些保护,要在栈上玩花样就麻烦不少了
Windows XP是2001年发布的,而且从Windows XP SP2开始已经引入了DEP(微软的NX实现)。问题是XP上的DEP默认只是对Windows的关键程序和服务才启动的:
这是为了避免在XP上带来程序不兼容的问题,因为在启用DEP机制前很多程序可能只是普通的malloc()了空间就用来放动态生成的代码了(当然,包括shellcoder写的程序 XD)
所以从Vista开始,DEP和ASLR都默认启动,安全性就稍微提高了些,代价是兼容性就下降了。
MSVC里有/NOCOMPAT选项来让程序指定它无法兼容DEP,告诉操作系统不要对它启用DEP;这当然是以更容易被shellcode攻击为代价的。
Windows上的NX实现跟Linux上的出现时间差不多,没什么特别值得惊讶的地方 =v=
另外Windows/x86上的程序没有默认用EBP来保存返回地址的。EBP默认是用来保存FP的,也就是frame pointer,栈帧指针。FP只在需要动态大小的栈帧时才特别有意义;还有就是SEH(Structured Exception Handling)需要用EBP来保持栈帧指针。
x86的ret指令会从栈顶pop出一个DWORD,把它当作返回地址进行跳转。这跟寄存器没什么直接关系……
1 楼
seen
2009-07-23
看了一系列你写的类似shellcode的帖子之后有个疑问:难道ms的os和编译器直到现在还允许运行栈上代码?还没有对内存检查NX bit?还没有保护ebp?还在用ebp来保存返回地址?还没有对栈进行保护?
这些早在03年fc1出来的时候就有了 而ms居然拖到vista才开始引进?
有了这些保护,要在栈上玩花样就麻烦不少了
这些早在03年fc1出来的时候就有了 而ms居然拖到vista才开始引进?
有了这些保护,要在栈上玩花样就麻烦不少了
发表评论
-
字符串的一般封装方式的内存布局 (0): 拿在手上的是什么
2013-11-04 18:22 21495(Disclaimer:未经许可请 ... -
字符串的一般封装方式的内存布局
2013-11-01 12:55 0(Disclaimer:未经许可请 ... -
RubyConf notes
2011-11-08 19:10 0symmetric coroutine Fiber#trans ... -
ShanghaiOnRails第八次线下活动——你不需要知道的Ruby实现
2010-11-12 15:39 2843上个月底正好赶上参加了ShanghaiOnRails 第八次线 ... -
JRuby的运行模式
2010-11-01 11:21 0// 老的JRuby还是用org.jruby.evaluato ... -
你不需要知道的Ruby草稿
2010-10-27 11:25 0一些Ruby实现 Ruby 1.8 树遍历解释 Ruby 1 ... -
Ruby里的fiber/coroutine例子
2010-01-26 18:33 0Ruby 1.9开始支持fiber。与“fiber”一词的一般 ... -
JRuby使用技巧收集
2009-12-28 09:35 0java.lang.Thread.new { puts &qu ... -
特殊类型的eigenclass
2009-12-17 03:39 0Fixnum的实例没有eigenclass true、fals ... -
奇怪的参数
2009-12-08 02:25 0默认参数与闭包的组合 真正的问题不是只是默认参数看起来很诡异, ... -
MacRuby的执行模式
2009-12-07 07:41 0mailing-list macruby-devel http ... -
Rubinius的执行模型
2009-12-05 15:22 0Rubinius wants to help YOU make ... -
Ruby 1.8和1.9中String#hash的实现
2009-11-22 18:23 01.8 string.c int rb_str_hash(s ... -
To囧:拿你来测测Watir...
2009-11-21 22:38 3443iaimstar 写道@RednaxelaFX 你最近ruby ... -
[标题党] MagLev中GC类的真相……
2009-11-21 14:46 0注意到本文的标题:我是说“GC类”的真相,不是说GC的真相哦~ ... -
小试rubyzip的一个脚本
2009-11-17 20:42 3458呼,今天开始3天都是新人培训,总算可以抽点时间发一帖。 现在在 ... -
爬一下Google和百度看口碑对它们做的SEO效果如何
2009-11-09 00:27 0#!/usr/bin/env ruby require ... -
把Mechanize的html_parser改回到Hpricot
2009-11-08 14:45 3116记得我最初开始用Nokogir ... -
使用新的RubyInstaller
2009-11-07 02:37 0Hpricot的安装需要编译,需要devkit -
Ruby metaprogramming tech notes
2009-09-28 15:39 0class Builder def self.build ...
相关推荐
VASP+BEEF beef-vdW全称为Bayesian error estimation functional with van der Waals correlation, 是DTU在2012年做出来的一个新泛函,目前和Quantum Espresso,VASP,GPAW均有接口。具体的编译过程可以参考SUNCAT...
本文档介绍了一种常用的渗透测试工具——Beef,以及如何利用它对客户端浏览器进行劫持。 Beef(Browser Exploitation Framework)是一个基于Web的渗透测试框架,专门设计用于安全研究人员和渗透测试人员控制和操纵...
下载beef 解压到 /pentest/web/beef/ cd /pentest/web/beef/ curl -L get.rvm.io | bash -s stable rvm install 1.9.3 rvm use 1.9.3 ##rvm remove 1.9.2 ruby -v gem install bundler bundle install ./beef 生成一...
Beef 插件翻译文档 Beef 插件是一个功能强大且广泛使用的渗透测试工具,它提供了多种模块来实现不同的攻击和信息收集任务。下面是 Beef 插件翻译文档中的知识点总结: 1. Module Tree(模块树): Module Tree 是...
BeEF,全称The Browser Exploitation Framework,是一款针对浏览器的渗透测试工具。
virtual box 虚拟机 显卡 驱动 VBoxVideo, PCI VEN 80EE & DEV BEEF
工具的使用 _ BeEF的使用1
标题中的“key_beef.zip_28335读取io_DSP GPIO BEEF_DSP28335 IO_DSP28335蜂鸣器_按键”表明了这个压缩包内容是关于使用TI公司的TMS320F28335 DSP(数字信号处理器)进行I/O操作,特别是GPIO(通用输入/输出)功能,...
kali-beef攻击浏览器-运维安全详细笔记总结
cut-roasted-beef.zip
牛肉安装机 该脚本可自动从GitHub安装BeEF(浏览器利用框架)。要使用它以root身份运行: (为了): git clone https://github.com/tony23x/beef-install.git cd beef-installer;ls bash install.sh python3 beef...
码头牛肉BeEF 的 Dockerfile(浏览器开发框架) 拉取存储库docker pull malwarelu/beef 启动 BeEF docker docker run malwarelu/beef 正在运行的容器上的 TCP/3000 上可用的服务
这篇文档主要涉及的是小学六年级英语上册Lesson 9的教学内容,主题为"Give me some beef, please?",旨在帮助学生掌握比较级句式和相关的词汇及交际用语。 1. **核心词汇**: - 四会单词(需熟练听说读写):`...
Artwork Beef Beef自动为视频和音乐库中的媒体添加额外的插图。 它通常用于处理扩展的艺术品,就像Kodi和刮板已经为基本艺术品所做的一样。 它从出色的Web服务 , , 和。 它是为Kodi 17 Krypton开发的,也应该适用...
【标题】"spine-beef:将Spine运行时移植到牛肉" 首先,我们要了解“Spine”和“牛肉”这两个概念在IT行业的特殊含义。Spine通常指的是Spine.js,一个轻量级的JavaScript MVC(模型-视图-控制器)框架,用于构建富...
六年级英语上册 Lesson 7 Give me some beef,please学案 科普版
在这个实验中,我们将重点探讨XSS通过JavaScript发起的攻击,以及如何使用Beef-xss工具进行模拟攻击。 实验目的旨在让你理解XSS的基本概念,掌握其攻击方式,特别是利用JavaScript的手段,并了解攻击的实施过程。...
亲爱的ImGui包装器,适用于Beef编程语言一代每天发生在世界标准时间06:00 生成器使用的docking_inter分支。用法将项目克隆到BeefLibs中,然后在IDE中,右键单击您的工作区,然后从“已安装的项目”中添加> ImGui,...
在IT行业中,"不可能的牛肉"(Improbable Beef)可能是一个项目或产品的名称,但因为没有具体的标签或额外信息,我们无法直接关联到特定的IT知识点。不过,我们可以从这个名称出发,探讨一些与软件开发、游戏设计、...