python 計算器 eval ctf_CTF逆向--.NET與Python篇

題目(來源:Jarvis-OJ):

Classical Crackme

Classical CrackMe2

FindKey

Login

Classical Crackme

首先查殼

沒有殼,不過發現這是一個.net的程序,將其拖進dnSpy中,找到主程序,同時發現關鍵代碼,如下所示:

private void \u202C\u200B\u206A\u202A\u206D\u206B\u202D\u206F\u202D\u200C\u200E\u206B\u202E\u202E\u202C\u202B\u206A\u206D\u206E\u202B\u206E\u200F\u202D\u200E\u202C\u200F\u200D\u200F\u202B\u200C\u202A\u206D\u206A\u206E\u202D\u200D\u200C\u206B\u202A\u202D\u202E(object obj, EventArgs eventArgs)

{

string s = this.\u200E\u206F\u206A\u200F\u206E\u202C\u206C\u200C\u206A\u200B\u206E\u202D\u206B\u202D\u200F\u206B\u202B\u200C\u206B\u202D\u206D\u202B\u206B\u200C\u206F\u206D\u206A\u202D\u200F\u202E\u200B\u206D\u202C\u200D\u200D\u202C\u200F\u202E\u202E\u206A\u202E.Text.ToString();

byte[] bytes = Encoding.Default.GetBytes(s);

string a = Convert.ToBase64String(bytes);

string b = "UENURntFYTV5X0RvX05ldF9DcjRjazNyfQ==";

if (a == b)

{

MessageBox.Show("注冊成功!", "提示", MessageBoxButtons.OK);

}

else

{

MessageBox.Show("注冊失敗!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Hand);

}

}

可以看到,如果輸入的字符串進行base64編碼后若和字符串‘UENURntFYTV5X0RvX05ldF9DcjRjazNyfQ==’一致,則顯示注冊成功,將該字符串進行base64解碼,得到flag

Flag:PCTF{Ea5y_Do_Net_Cr4ck3r}

Classical CrackMe2

首先查殼

.net程序,先拖進ILSpy(dnSpy的編碼看起來太辛苦了-_-|||,等一下需要動態調試的時候再用它)找到主函數中的關鍵代碼,如下所示

可以看到對用戶輸入的flag限制條件為:

(1)不為空

(2)進行AES加密后再經過base64編碼必須等于某個字符串

既然這樣我們就通過動態調試來找出key和加密后字符串,將文件拖進dnSpy,找到上面的函數,給獲取key的地方下個斷點,如下所示

開始調試,運行到該位置時得到key

右鍵->show in memory window->memory 1,key如下

然后找加密后的字符串,接下來在關鍵判斷的位置下斷點

調試,得到加密后的字符串”x/nzolo0TTIyrEISd4AP1spCzlhSWJXeNbY81SjPgmk=”

下面就可以寫腳本獲取flag

import base64,binascii from Crypto.Cipher import AES key = 'pctf2016pctf2016pctf2016pctf2016' result = 'x/nzolo0TTIyrEISd4AP1spCzlhSWJXeNbY81SjPgmk=' after_encrypt = binascii.b2a_hex(base64.b64decode(result)) a = AES.new(key) flag = a.decrypt(after_encrypt.decode('hex')) print flag

Flag:PCTF{Dot_Net_UnPack3r_yoo}

FindKey

這是一道pyc逆向,直接百度pyc在線逆向,找到相應的網站后上傳需要逆向的pyc文件,接下來就能得到源碼,如下所示

#!/usr/bin/env python # encoding: utf-8 # 訪問 http://tool.lu/pyc/ 查看更多信息 import sys lookup = [196,153,149,206,17,221,10,217,167,18,36,135,103,61,111,31,92,152,21,228,105,191,173,41,2,245,23,144, ????????? 1,246,89,178,182,119,38,85,48,226,165,241,166,214,71,90,151,3,109,169,150,224,69,156,158,57,181,29, ????????? 200,37,51,252,227,93,65,82,66,80,170,77,49,177,81,94,202,107,25,73,148,98,129,231,212,14,84,121,174, ????????? 171,64,180,233,74,140,242,75,104,253,44,39,87,86,27,68,22,55,76,35,248,96,5,56,20,161,213,238,220,72, ????????? 100,247,8,63,249,145,243,155,222,122,32,43,186,0,102,216,126,15,42,115,138,240,147,229,204,117,223,141, ????????? 159,131,232,124,254,60,116,46,113,79,16,128,6,251,40,205,137,199,83,54,188,19,184,201,110,255,26,91,211, ????????? 132,160,168,154,185,183,244,78,33,123,28,59,12,210,218,47,163,215,209,108,235,237,118,101,24,234,106,143, ????????? 88,9,136,95,30,193,176,225,198,197,194,239,134,162,192,11,70,58,187,50,67,236,230,13,99,190,208,207,7,53, ????????? 219,203,62,114,127,125,164,179,175,112,172,250,133,130,52,189,97,146,34,157,120,195,45,4,142,139] pwda = [188,155,11,58,251,208,204,202,150,120,206,237,114,92,126,6,42] pwdb = [53,222,230,35,67,248,226,216,17,209,32,2,181,200,171,60,108] flag = raw_input('Input your Key:').strip() if len(flag) != 17: ??? print 'Wrong Key!!' ??? sys.exit(1) flag = flag[::-1] for i in range(0, len(flag)): ??? if ord(flag[i]) + pwda[i] & 255 != lookup[i + pwdb[i]]: ??????? print 'Wrong Key!!' ??????? sys.exit(1) ?print 'Congratulations!!'

很簡單,將其的代碼復制下來就可得到flag,腳本如下所示

lookup = [196,153,149,206,17,221,10,217,167,18,36,135,103,61,111,31,92,152,21,228,105,191,173,41,2,245,23,144, ????????? 1,246,89,178,182,119,38,85,48,226,165,241,166,214,71,90,151,3,109,169,150,224,69,156,158,57,181,29, ????????? 200,37,51,252,227,93,65,82,66,80,170,77,49,177,81,94,202,107,25,73,148,98,129,231,212,14,84,121,174, ????????? 171,64,180,233,74,140,242,75,104,253,44,39,87,86,27,68,22,55,76,35,248,96,5,56,20,161,213,238,220,72, ????????? 100,247,8,63,249,145,243,155,222,122,32,43,186,0,102,216,126,15,42,115,138,240,147,229,204,117,223,141, ????????? 159,131,232,124,254,60,116,46,113,79,16,128,6,251,40,205,137,199,83,54,188,19,184,201,110,255,26,91,211, ????????? 132,160,168,154,185,183,244,78,33,123,28,59,12,210,218,47,163,215,209,108,235,237,118,101,24,234,106,143, ????????? 88,9,136,95,30,193,176,225,198,197,194,239,134,162,192,11,70,58,187,50,67,236,230,13,99,190,208,207,7,53, ????????? 219,203,62,114,127,125,164,179,175,112,172,250,133,130,52,189,97,146,34,157,120,195,45,4,142,139] pwda = [188,155,11,58,251,208,204,202,150,120,206,237,114,92,126,6,42] pwdb = [53,222,230,35,67,248,226,216,17,209,32,2,181,200,171,60,108]flag = "" for i in range(17): ??? flag += chr(lookup[i+pwdb[i]] - pwda[i]&255) ?print flag[::-1]

Flag:PCTF{PyC_Cr4ck3r}

Login

首先查殼

沒殼,拖進IDA,F12查看字符串,發現里面出現了python的標志

按理來說一般的c程序是不會出現python的,但是這里卻出現了大量的Py前綴,這說明什么呢,說明這個exe實際上是一個python轉exe的程序(你問我為什么會知道?因為我之前在HXBCTF征題的時候就出了道Python轉exe的題打算坑一坑人\/ ? ? ? \/),在網上下一個pyinstxtractor.py就可將其解壓,然后查看解壓后的文件夾

首先看到有一堆API的dll,不管它,然后還看到一個Python35.dll,查一下殼,發現是UPX加殼的,使用脫殼機脫掉后,丟進IDA里查看,點擊F12查看字符串,一大堆字符串-_-||,嘗試搜索一下flag,然后發現了這個

查看引用后來到了這個函數

就這樣來到了核心代碼的位置,這里可以看到if ( v3 != (v4 ^ byte_1E253040[v3]) )這個if判斷是關鍵判斷,只有當其正確,整個while循環才會執行到輸出Congratulation處而V4就是用戶輸入的Password,因此就可以寫一個腳本來得出flag

a = [0x50 ,0x78 ,0x76 ,0x6B ,0x34 ,0x6B ,0x59 ,0x63? ,0x49 ,0x56 ,0x6C ,0x4A ,0x53 ,0x65 ,0x4F ,0x3F] count = 0 flag = '' for i in range(len(a)): ??? for i in range(33,127): ??????? if i^a[count] == count: ??????????? flag += chr(i) ??????????? count += 1 ??????????? break print flag

這里的a就是上面代碼中的byte_1E253040數組

Flag:Pyth0n_dA_fA_hA0

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260523.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260523.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260523.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2016年秋季個人閱讀計劃

閱讀書目:《軟件需求十步走》 讀后感發表日期:閱讀書目:《用戶故事與敏捷方法》 讀后感發表日期:第一篇:10月1日 第二篇:10月3日 第三篇:10月7日 第四篇:10月15日 第五篇&#xff1a…

第10章 Python 數字圖像處理(DIP) - 圖像分割 基礎知識 標準差分割法

This Chapter is all about image segmentation. I still not finished whole chapter, but here try to publish some for reference. 這里寫目錄標題基礎知識import sys import numpy as np import cv2 import matplotlib import matplotlib.pyplot as plt import PIL from …

OFBiz的探索進階

主要參照https://cwiki.apache.org/OFBIZ/ofbiz-tutorial-a-beginners-development-guide.html這個教程,實現的過程教程上很詳細,故這里不多說 還參考了下http://www.hotwaxmedia.com/apache-ofbiz-blog/ofbiz/ofbiz-tutorials/ofbiz-tutorial-building-…

python3語法都相同嗎_python2 與 python3 語法區別--轉

原文地址:http://old.sebug.net/paper/books/dive-into-python3/porting-code-to-python-3-with-2to3.html 使用2to3將代碼移植到Python 3 ? Life is pleasant. Death is peaceful. It’s the transition that’s troublesome. ? — Isaac Asimov (attributed) 概…

對GCD的一些理解和實踐

對GCD的一些理解和實踐GCD GCD,全程Grand Central Dispatch,是蘋果為了多核并行提出的解決方案。它是使用C語言實現,但是由于用了block來處理回調,所以使用起來十分方便。并且GCD會自動管理線程的生命周期,不需要我們去…

python scrapy爬蟲遇見301_在Pycharm中運行Scrapy爬蟲項目的基本操作

目標在Win7上建立一個Scrapy爬蟲項目,以及對其進行基本操作。運行環境:電腦上已經安裝了python(環境變量path已經設置好),以及scrapy模塊,IDE為Pycharm 。操作如下:一、建立Scrapy模板。進入自己的工作目錄&#xff0c…

[Buzz Today]2012.08.08

# Dark Reign 2 源代碼現身Google Code Pandemic工作室開發的即時戰略游戲《Dark Reign 2》源代碼被泄露到了Google Code http://code.google.com/p/darkreign2/ # Warsow 1.0發布 Set in a futuristic cartoonish world, Warsow is a completely free fast-paced first-person…

PyTorch訓練中Dataset多線程加載數據,比Dataloader里設置多個workers還要快

PyTorch訓練中Dataset多線程加載數據,而不是在DataLoader 背景與需求 現在做深度學習的越來越多人都有用PyTorch,他容易上手,而且API相對TF友好的不要太多。今天就給大家帶來最近PyTorch訓練的一些小小的心得。 大家做機器學習、深度學習都…

Trading

http://v.youku.com/v_show/id_XMTA0OTcxMjgw.html?fromy1.2-1-87.3.8-1.1-1-1-7 轉載于:https://www.cnblogs.com/wangjianping/p/3705524.html

算法9---二叉樹的遍歷不用棧和遞歸

二叉樹的遍歷不用棧和遞歸 轉自:ACM之家 http://www.acmerblog.com/inorder-tree-traversal-without-recursion-and-without-stack-5988.html我們知道,在深度搜索遍歷的過程中,之所以要用遞歸或者是用非遞歸的棧方式,參考二叉樹非…

python調用攝像頭人臉識別代碼_利用face_recognition,dlib與OpenCV調用攝像頭進行人臉識別...

用已經搭建好 face_recognition,dlib 環境來進行人臉識別 未搭建好環境請參考: 使用opencv 調用攝像頭 import face_recognition import cv2 video_capture cv2.videocapture(0) # videocapture打開攝像頭,0為筆記本內置攝像頭,1…

python列表批量 修改_python實現多進程按序號批量修改文件名的方法示例

本文實例講述了python實現多進程按序號批量修改文件名的方法。分享給大家供大家參考,具體如下:說明文件名命名方式如圖,是數字序號開頭,但是中間有些文件刪掉了,序號不連續,這里將序號連續起來,…

Struts1 tag

標簽庫: a) struts框架下的struts標簽庫 b) sun jstl c標簽庫 作用: 1) jsp 和 java代碼分離 -- 自定義標簽 用標簽來替代Java的代碼 2) struts標簽 能夠和struts-config.xml actionForm等特有的對象進行交互 stru…

“multiprocessing\spawn.py”, line 105, in spawn_main錯誤與解決方法

記錄一個不知名的錯誤錯誤解決方法OS: Windows 10 錯誤非常的長,以至于,我也沒有什么耐心去看,看了前面幾行,應該是多線程引起的。下面太長,可以選擇不看。 錯誤 Traceback (most recent call last): Trac…

hpunix下11gRac的安裝

一.檢查環境 1.操作系統版本# uname -a 2.補丁包三大補丁包#swlist -l bundle|grep QPKAPPS#swlist -l bundle|grep QPKBASE#swlist -l bundle|grep HWEnable11i #swlist -l patch -a supersedes|grep PHKL_XXXXX檢查是否已有或是已被替代For HP-UX 11i V3 (11.31): PHCO_40381…

【轉】徹底搞清計算結構體大小和數據對齊原則

數據對齊: 許多計算機系統對基本數據類型合法地址做出了一些限制,要求某種類型對象的地址必須是某個值K(通常是2,4或8)的倍數。這種對齊限制簡化了形成處理器和存儲器系統之間的接口的硬件設計。例如,假設一個處理器總是從存儲器中取出8個字節…

python里pip是什么意思_python使用pip的方法是什么

python使用pip的方法是什么 發布時間:2020-08-25 11:51:08 來源:億速云 閱讀:104 作者:小新 小編給大家分享一下python使用pip的方法是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下&am…

Pytorch 學習率衰減 之 余弦退火與余弦warmup 自定義學習率衰減scheduler

學習率衰減,通常我們英文也叫做scheduler。本文學習率衰減自定義,通過2種方法實現自定義,一是利用lambda,另外一個是繼承pytorch的lr_scheduler import math import matplotlib.pyplot as plt import numpy as np import torch i…

c++ 字符串賦給另一個_7.2 C++字符串處理函數

點擊上方“C語言入門到精通”,選擇置頂第一時間關注程序猿身邊的故事作者閆小林白天搬磚,晚上做夢。我有故事,你有酒么?C字符串處理函數C語言和C提供了一些字符串函數,使得用戶能很方便地對字符串進行處理。這些是放在…

如何檢測遠程主機上的某個端口是否開啟

有時候我們要測試遠程主機上的某個端口是否開啟,無需使用太復雜的工作,windows下就自帶了工具,那就是telnet。怎么檢測呢,按下面的步驟: 1、安裝telnet。我的win7下就沒有telnet,在cmd下輸入telnet提示沒有…