|
|
[求助]HKLM/system/currentcontrolset/control/class/{4d36e972-e325-11ce-bfc1-08002be10318} 注册表项的意义
605K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2U0L8X3u0D9L8$3N6K6i4K6u0W2j5$3!0E0i4K6u0r3K9r3g2K6N6r3g2J5i4K6u0r3M7q4)9J5c8U0M7#2z5e0p5^5y4K6k6Q4x3X3g2Z5N6r3#2D9 066K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4N6W2L8X3c8S2L8X3N6C8N6g2)9J5k6h3&6W2N6q4)9J5c8X3c8G2j5#2)9J5c8U0u0T1j5e0V1H3y4h3u0V1k6X3b7H3j5e0M7&6y4e0j5K6j5K6q4W2y4K6t1%4y4q4)9J5k6h3S2@1L8h3H3`.搜索UpperBind |
|
|
|
|
|
[翻译]Unicorn引擎教程
TASK 4from unicorn import *
from unicorn.arm_const import *
import struct
def read(name):
with open(name) as f:
return f.read()
def u32(data):
return struct.unpack("I", data)[0]
def p32(num):
return struct.pack("I", num)
mu = Uc (UC_ARCH_ARM, UC_MODE_LITTLE_ENDIAN)
BASE = 0x10000
STACK_ADDR = 0x300000
STACK_SIZE = 1024*1024
mu.mem_map(BASE, 1024*1024)
mu.mem_map(STACK_ADDR, STACK_SIZE)
mu.mem_write(BASE, read("./task4"))
mu.reg_write(UC_ARM_REG_SP, STACK_ADDR + STACK_SIZE/2)
instructions_skip_list = []
CCC_ENTRY = 0x000104D0
CCC_END = 0x00010580
stack = [] # Stack for storing the arguments
d = {} # Dictionary that holds return values for given function arguments
def hook_code(mu, address, size, user_data):
#print('>>> Tracing instruction at 0x%x, instruction size = 0x%x' %(address, size))
if address == CCC_ENTRY: # Are we at the beginning of ccc function?
arg0 = mu.reg_read(UC_ARM_REG_R0) # Read the first argument. it is passed by R0
if arg0 in d: # Check whether return value for this function is already saved.
ret = d[arg0]
mu.reg_write(UC_ARM_REG_R0, ret) # Set return value in R0
mu.reg_write(UC_ARM_REG_PC, 0x105BC) # Set PC to point at "BX LR" instruction. We want to return from fibonacci function
else:
stack.append(arg0) # If return value is not saved for this argument, add it to stack.
elif address == CCC_END:
arg0 = stack.pop() # We know arguments when exiting the function
ret = mu.reg_read(UC_ARM_REG_R0) # Read the return value (R0)
d[arg0] = ret # Remember the return value for this argument
mu.hook_add(UC_HOOK_CODE, hook_code)
mu.emu_start(0x00010584, 0x000105A8)
return_value = mu.reg_read(UC_ARM_REG_R1) # We end the emulation at printf("%d\n", ccc(x)).
print "The return value is %d" % return_value
|
|
|
[翻译]Unicorn引擎教程
TASK 3from unicorn import *
from unicorn.x86_const import *
import struct
def read(name):
with open(name) as f:
return f.read()
def u32(data):
return struct.unpack("I", data)[0]
def p32(num):
return struct.pack("I", num)
mu = Uc (UC_ARCH_X86, UC_MODE_32)
BASE = 0x08048000
STACK_ADDR = 0x0
STACK_SIZE = 1024*1024
mu.mem_map(BASE, 1024*1024)
mu.mem_map(STACK_ADDR, STACK_SIZE)
mu.mem_write(BASE, read("./function"))
r_esp = STACK_ADDR + (STACK_SIZE/2) #ESP points to this address at function call
STRING_ADDR = 0x0
mu.mem_write(STRING_ADDR, "batman\x00") #write "batman" somewhere. We have choosen an address 0x0 which belongs to the stack.
mu.reg_write(UC_X86_REG_ESP, r_esp) #set ESP
mu.mem_write(r_esp+4, p32(5)) #set the first argument. It is integer 5
mu.mem_write(r_esp+8, p32(STRING_ADDR)) #set the second argument. This is a pointer to the string "batman"
mu.emu_start(0x8048464, 0x804849A) #start emulation from the beginning of super_function, end at RET instruction
return_value = mu.reg_read(UC_X86_REG_EAX)
print "The returned value is: %d" % return_value
|
|
|
[翻译]Unicorn引擎教程
以下的代码并不是一次性写出来的,通过UC的错误消息,获得可能的线索然后来辅助实施最终的解决方案TASK 2from unicorn import *
from unicorn.x86_const import *
shellcode = "\xe8\xff\xff\xff\xff\xc0\x5d\x6a\x05\x5b\x29\xdd\x83\xc5\x4e\x89\xe9\x6a\x02\x03\x0c\x24\x5b\x31\xd2\x66\xba\x12\x00\x8b\x39\xc1\xe7\x10\xc1\xef\x10\x81\xe9\xfe\xff\xff\xff\x8b\x45\x00\xc1\xe0\x10\xc1\xe8\x10\x89\xc3\x09\xfb\x21\xf8\xf7\xd0\x21\xd8\x66\x89\x45\x00\x83\xc5\x02\x4a\x85\xd2\x0f\x85\xcf\xff\xff\xff\xec\x37\x75\x5d\x7a\x05\x28\xed\x24\xed\x24\xed\x0b\x88\x7f\xeb\x50\x98\x38\xf9\x5c\x96\x2b\x96\x70\xfe\xc6\xff\xc6\xff\x9f\x32\x1f\x58\x1e\x00\xd3\x80"
BASE = 0x400000
STACK_ADDR = 0x0
STACK_SIZE = 1024*1024
mu = Uc (UC_ARCH_X86, UC_MODE_32)
mu.mem_map(BASE, 1024*1024)
mu.mem_map(STACK_ADDR, STACK_SIZE)
mu.mem_write(BASE, shellcode)
mu.reg_write(UC_X86_REG_ESP, STACK_ADDR + STACK_SIZE/2)
def syscall_num_to_name(num):
syscalls = {1: "sys_exit", 15: "sys_chmod"}
return syscalls[num]
def hook_code(mu, address, size, user_data):
#print('>>> Tracing instruction at 0x%x, instruction size = 0x%x' %(address, size))
machine_code = mu.mem_read(address, size)
if machine_code == "\xcd\x80":
r_eax = mu.reg_read(UC_X86_REG_EAX)
r_ebx = mu.reg_read(UC_X86_REG_EBX)
r_ecx = mu.reg_read(UC_X86_REG_ECX)
r_edx = mu.reg_read(UC_X86_REG_EDX)
syscall_name = syscall_num_to_name(r_eax)
print "--------------"
print "We intercepted system call: "+syscall_name
if syscall_name == "sys_chmod":
s = mu.mem_read(r_ebx, 20).split("\x00")[0]
print "arg0 = 0x%x -> %s" % (r_ebx, s)
print "arg1 = " + oct(r_ecx)
elif syscall_name == "sys_exit":
print "arg0 = " + hex(r_ebx)
exit()
mu.reg_write(UC_X86_REG_EIP, address + size)
mu.hook_add(UC_HOOK_CODE, hook_code)
mu.emu_start(BASE, BASE-1)
|
|
|
|
|
|
[悬赏]关于15pb的培训靠谱吗?有知道的吗?或者在那里学过的来回答一下我
不太明白楼主发帖的目的。如果已经决定去学习了,还有一个月的选择期呢,剩下的学费只有在你第一个月成绩合格之后才会继续收取,不合格接着学或者放弃,选择权完全在你手里。既然已经报名,这个时候你就应该踏踏实实的,把精力和心思放在学习上。至于师资力量,我只说一点,15PB的讲师队伍是目前这几家培训机构中最稳定的。稳定意味着时间长,时间长即经验足。至于关于老师本身的安全相关能力(直观点讲,就是牛不牛B)与授课能力的关系,V校的回答毫无疑问是最有代表性的。15PB一直在努力给前来学习的学员提供一个稳定的良好的学习环境,为此投入巨大,你来了就知道了,创造一个好的环境是需要巨大的投入的。至于说15PB赚没赚钱,反正十几名专业讲师的工资还是要开的,但你要说赚没赚大钱,至少我知道目前金牌讲师队伍中只有任老师还开着他那不知名的国产小汽车,其他讲师都是破破烂烂的电动车,此处略去若干字。15PB致力于为中小企业培养300万信息安全人才,这是一条很长的路,任老师带着他的队伍已经坚持了很久了,这条路并不容易(由那些毫无理由就指责15PB的若干信息就可见一斑,这还是看的见的,还有更多看不见的坑坑洼洼,目前来看,还算是趟过去了吧),未来或许会更加艰难,但是,无论有多艰难,我们对待来这里学习的学员的态度都是始终如一的,你来学,那么我们就会尽一切可能来帮助你掌握相关的技能和知识,因为你选择了相信15PB,这是对我们莫大的安慰。对于相关的诋毁言论,想必凡是有一个正常思考能力的人都可以做到明辨是非。不管怎么说,你可以来了先相处一段时间,然后再做最终的决定,还是那句话,选择权在你手里。为什么我要说这么多呢,因为我也是15PB出来的。^_^ 再次怀疑一下楼主发帖的目的。 |
|
|
[讨论]svhost占用内存3G,吓坏了:(如何分析这个进程都在干些什么呢?
你把windowsupdate进程结束掉你就会发现内存迅速降下去了 |
|
|
[求助]脱壳UPX
4215073 = 0x405121,一看ContextFlags就知道这是10进制显示的了。。。这是VS吧,再监视窗口右键选择16进制显示 |
|
|
|
|
|
|
|
|
[求助]ELF文件动态调试时有多余代码出现
调试器选错了,代码是64位的,调试器里是32位的。dec eax(ebx,ecx...) 实际上是 64位rax,rbx....的指令前缀 |
|
|
[求助]请教一个iat修复时的问题
apphelp.dll是系统兼容组件,会HOOK一些函数来兼容老旧软件。最简单的办法是换XP系统修复IAT |
|
|
[翻译]Intel软件开发指南翻译卷3第四部分 第38章
有点不太明白飞地是什么意思,于是Google翻译了一下,ENCLAVE ACCESS CONTROL在Google翻译中是“附件访问控制”,单个单词ENCALVE的翻译是飞地,显然,词组的翻译效果优于单个单词翻译的效果。 |
|
|
[求助]Dll文件的code setcion (.text) 在pe文件中的数据和加载之后在进程空间的(.text数据)是一致的吗?
szCRC32=CRC32((BYTE*)(pBuffer+pSecHead-z>PointerToRawData),pSecHeader->Misc.VirtualSize); -------------------------------------------- 我去,发完就反应过来写错了。。。。。 确实是因为重定位的关系,dll的重定位导致一些数据引用数值发生了改变
|
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
勋章
兑换勋章
证书
证书查询 >
能力值
