看雪CTF2017第一題簡單分析
本題比較簡單,無殼、無VM、無密碼學,適合入門練習
中午一覺睡醒,逛逛論壇才發現有ctf比賽,就隨便看了一下
動態調一下就好了,發現確實是多解,下面我就簡單說一下自己的分析流程吧
0x00 定位關鍵跳轉
首先拿到CrackMe,就直接隨便輸入了一串字串“111111”
看到是有彈窗提示的,根據報出的“error!”字串就能直接定位到關鍵跳轉位置了。
下面就通過字串搜尋,找到“error!”位置,發現是在004012c6位置跳轉的:0x01 判斷輸入值的長度
那麼我們繼續往上分析,可以檢視到我們輸入後傳入值的部分,並通過strlen來獲取其長度是否為4,不為4則直接跳轉到004012CF:現在可以確定key
0x02 驗證key前2位的值
這裡驗證key的值是否都為字串“0”,如果4位的key又一個為“0”,則直接跳轉到“error”彈出框
然後接著就是繼續驗證key前2位字串的值,即給出字串的前2位為“15”
如果key的前2位的值不為“15”,則直接跳轉到“error”彈出框00401229 . /0F85 A0000000 jnz WannaLOL.004012CF 0040122F . |6A 30 push 0x30 00401231 . |59 pop ecx 00401232 . |384D E4 cmp byte ptr ss:[ebp-0x1C],cl //判斷key第1個字元是否為“0” 00401235 . |0F84 94000000 je WannaLOL.004012CF 0040123B . |384D E5 cmp byte ptr ss:[ebp-0x1B],cl //判斷key第2個字元是否為“0” 0040123E . |0F84 8B000000 je WannaLOL.004012CF 00401244 . |384D E6 cmp byte ptr ss:[ebp-0x1A],cl //判斷key第3個字元是否為“0” 00401247 . |0F84 82000000 je WannaLOL.004012CF 0040124D . |384D E7 cmp byte ptr ss:[ebp-0x19],cl //判斷key第4個字元是否為“0” 00401250 . |74 7D je short WannaLOL.004012CF 00401252 . |807D E4 31 cmp byte ptr ss:[ebp-0x1C],0x31 //判斷key第1個字元是否等於“1”,不等於則直接跳轉彈出“error” 00401256 . |75 77 jnz short WannaLOL.004012CF 00401258 . |807D E5 35 cmp byte ptr ss:[ebp-0x1B],0x35 //判斷key第2個字元是否等於“5”,不等於則直接跳轉彈出“error” 0040125C . |75 71 jnz short WannaLOL.004012CF 0040125E . |74 03 je short WannaLOL.00401263 00401260 . |75 01 jnz short WannaLOL.00401263
這裡得到前2為key的值為“15”
0x03 分析演算法
這裡運作流程:
1、取key中第3位的十六進位制值,然後減去0x30,這裡則假定值為a
2、取key中第1位值為“1”的十六進位制值即0x31,然後減去0x30,0x31-0x30 =1
3、取key中第2位值為“5”的十六進位制值即0x35,然後減去0x30,0x31-0x30 =5 ,接著就是1除以5得出浮點數0.2
4、取key中第4位的十六進位制值,然後減去0x30,這裡則假定值為b
5、接著就是(a-0.2)*b乘以16得出的結果為c
6、判斷c與384是否相等,相等則Registration successful !,不相同則“error”
公式:(a-0.2)*b*16 = 3840040126B . 0FBE45 E6 movsx eax,byte ptr ss:[ebp-0x1A] //取輸入key的第3位值
0040126F . 2BC1 sub eax,ecx //減去0x30,得到a
00401271 . 8945 FC mov dword ptr ss:[ebp-0x4],eax //把得到的值儲存在[ebp-0x4]中
00401274 . 0FBE45 E4 movsx eax,byte ptr ss:[ebp-0x1C] //取輸入key的第1位值“1”
00401278 . DB45 FC fild dword ptr ss:[ebp-0x4] //把[ebp-0x4]中儲存的值壓入到ST(0)中
0040127B . 2BC1 sub eax,ecx //0x31減去0x30,則為1
0040127D . 8945 FC mov dword ptr ss:[ebp-0x4],eax //把得到的值1儲存在[ebp-0x4]中
00401280 . 0FBE45 E5 movsx eax,byte ptr ss:[ebp-0x1B] //取輸入key的第2位值“5”
00401284 . DB45 FC fild dword ptr ss:[ebp-0x4] //把[ebp-0x4]中儲存的值1壓入到ST(0)中
00401287 . 2BC1 sub eax,ecx //0x35減去0x30,則為5
00401289 . 8945 FC mov dword ptr ss:[ebp-0x4],eax //把得到的值5儲存在[ebp-0x4]中
0040128C . DA75 FC fidiv dword ptr ss:[ebp-0x4] //st(0)Z中的值1除以[ebp-0x4]中的值5,得到0.2儲存到st(0)中
0040128F . 0FBE45 E7 movsx eax,byte ptr ss:[ebp-0x19] //取輸入key的第4位值
00401293 . 2BC1 sub eax,ecx //減去0x30,得到b
00401295 . 8945 FC mov dword ptr ss:[ebp-0x4],eax //把得到的值b儲存在[ebp-0x4]中
00401298 . DEE9 fsubp st(1),st //st(1)-st並儲存在st(0)中,即(a-0.2)
0040129A . DA4D FC fimul dword ptr ss:[ebp-0x4] //st(0)乘以[ebp-0x4] 中儲存的值b,結果儲存在st(0)中
0040129D . D80D 1C714000 fmul dword ptr ds:[0x40711C] //資料段ds:[0x40711C]值為16,這裡則是st(0)乘以16
004012A3 . D95D FC fstp dword ptr ss:[ebp-0x4] //把上面得到值儲存在[ebp-0x4]中
004012A6 . 74 03 je short WannaLOL.004012AB
004012A8 . 75 01 jnz short WannaLOL.004012AB
004012AA E8 db E8
004012AB > 66:B8 0800 mov ax,0x8
004012AF . 66:35 0700 xor ax,0x7
004012B3 . D945 FC fld dword ptr ss:[ebp-0x4] //取出[ebp-0x4]中儲存的值
004012B6 . D81D 18714000 fcomp dword ptr ds:[0x407118] //得出的值與384比較是否相等
0x04 編寫演算法指令碼
這裡根據上面分析,寫了個簡單的指令碼,跑出了2個結果 “151N”和"1555"def test(Max):
for i in range(Max):
for j in range(Max):
if((i - 0.2)*j ==24.0)
b = chr(int(str(hex(i+48)),16))
c = chr(int(str(hex(j+48)),16))
print "key--->15%s"%b+"%s"%c
if __name__ == '__main__':
test(255)
跑出來的結果:
相關推薦
看雪CTF2017第一題簡單分析
本題比較簡單,無殼、無VM、無密碼學,適合入門練習 中午一覺睡醒,逛逛論壇才發現有ctf比賽,就隨便看了一下 動態調一下就好了,發現確實是多解,下面我就簡單說一下自己的分析流程吧 0x00 定位關鍵跳轉 首先拿到CrackMe,就直接隨便輸入了一串字串“111111”
FCC初級演算法題簡單分析並附上程式碼
1.Reverse a String 翻轉字串 要求:先把字串轉化成陣列,再借助陣列的reverse方法翻轉陣列順序,最後把陣列轉化成字串。你的結果必須得是一個字串。 這是一些對你有幫助的資源: Global String Object String.spl
Leetcode題庫第一題(簡單系列)
第一題:給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例:給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2 + 7 = 9
看雪ctf2017 |WP Ericky.apk
前言 看雪的ctf還是很有水平的,我這菜雞表示只能看看 分析 用jeb開啟,發現做了很噁心的混淆,汗顏。使用n鍵對變數重新命名。 java層的分析我就不寫了,這題的考點在於so層演算法的分析以及指令的混淆。 ps:我幾乎用了一天的時間,去看
看雪CTF 2016_第四題分析
protect follow text cef 數據 crack update ase 時也 結合前輩們的分析,自己再作一個分析,算是當做學習筆記吧! OD 下GetDlgItemTextA 這個斷點 0040148C |. 83F8 1E cmp eax
看雪CTF 2016_第五題分析
一個 div git 範圍 代碼 進行 長度 每一個 語言 這個題是一道窮舉題,考察的應該是編程能力吧! 本題算法不是很難,也是挺好分析的。 這個程序可以下 GetDlgItem 這個api可以定位到關鍵地方。 00401183 > /8A54
看雪.Wifi萬能鑰匙 2017CTF年中賽---第一題
考察浮點數運算 1、OD載入,搜尋字串,查詢到錯誤或正確提示資訊,雙擊點進去。 找到以為的關鍵跳轉,下斷點,重新載入,輸入註冊碼,執行,竟然提示錯誤! 不死心的將關鍵跳轉NOP掉,儲存到檔案,執行, 結果依然報錯!果然爆破不行呀……那就老老實實檢視演算法吧。 2、在該段開始位置下斷點
2015阿里&看雪移動安全挑戰賽-第一題
2015阿里&看雪移動安全挑戰賽-第一題 題目傳送門:AliCrackme 網上已經有很多writeup,我也是按照烏雲上的2015移動安全挑戰賽(阿里&看雪主辦)全程回顧的基本思路來想的。但作為一個新手,就算照著教程來做也會踩到很多坑。所以
由看雪.Wifi萬能鑰匙 CTF 2017 第4題分析linux double free及unlinking漏洞
我是在ubuntu16 64位除錯的 現在unlink函式加了個判斷需要繞過: 即必須保證FD->bk = P 並且 BK->fd = P` 為了繞過這個驗證,需要找到一個地址x,使*x=p, 釋放chunk前,檢查FD->bk=BK->f
看雪CTF第八題
else tar ops ini 指令 text 技術分享 __init__ str vm_context 00000000 vm_context struc ; (sizeof=0x70, mappedto_32) 00000000 r0
看雪.TSRC 2017CTF秋季賽第三題
truct item set 報錯 spring 現在 logs 封裝 檢測方法 看雪.TSRC 2017CTF秋季賽第三題 wp 這是一道很簡單的題,反調試的坑略多。這道題采用了很多常用的反調試手段,比如調用IsDebuggerPresent、進程名檢查等等。另外也有利用
【京東】2016研發工程師(第一題沒做出來,動態規劃類似公共子串重點,反覆看;第三題沒有做出來自我檢討)
[程式設計題]年終獎 小東所在公司要發年終獎,而小東恰好獲得了最高福利,他要在公司年會上參與一個抽獎遊戲,遊戲在一個6*6的棋盤上進行,上面放著36個價值不等的禮物,每個小的棋盤上面放置著一個禮物,他需要從左上角開始遊戲,每次只能向下或者向右移動一步,到達右下角停止,一路上的格子裡的禮物小東都能
倆數之和(leetcode簡單篇第一題)
給定一個整數陣列 nums 和一個目標值 target,請你在該陣列中找出和為目標值的 兩個 整數。 你可以假設每種輸入只會對應一個答案。但是,你不能重複利用這個陣列中同樣的元素。 示例:給定 nums = [2, 7, 11, 15], target = 9 因為 nums
演算法設計與分析P8演算法實現第一題
#include<stdio.h> #include<string.h> int main() { int n, t, i,temp; int count[10]; mem
360杯資訊保安技術大賽Web第一題分析
原題如下,提示是 程式設計師的壞習慣 根據提示,在當前URL後加.bak,獲得原始碼 <?php error_reporting(0); function auth($password, $hidden_password){ $res=0; i
看雪CTF 2017 第六題設計思路和解題思路
這道題主要需要花時間搞清楚套路,就迎刃而解了。^_^ 1.java層稍作字串加密和類名方法名混淆處理(本來是打算java層也做點文章的@[email protected]) 解題:通過閱讀程式碼,可以知道check函式為關鍵函式,當返回為
看雪wifi萬能鑰匙CTF年中賽 第四題 writeup(2)
上一篇題解是學習的poyoten的姿勢,這個呢,是學習到了loudy大神的姿勢 首先呢:要把sys_rva和put_rva以及free_rva換成本地libc的偏移值,姿勢如圖 按照第一篇的方法,給程式碼加上gdb斷點 gdb.attach(p, 'b *0x4
2015阿里&看雪移動安全挑戰賽-第二題
2015阿里&看雪移動安全挑戰賽-第二題 題目傳送門:AliCrackme 網上已經有很多writeup,我也是按照烏雲上的2015移動安全挑戰賽(阿里&看雪主辦)全程回顧的基本思路來想的。但作為一個新手,就算照著教程來做也會踩到很多坑。所以
海量分頁的簡單分析
elk mic als emc usb won tm4 pop iap 此文僅個人理解,不到之處望指出 提出:easyui的datagrid組件有海量分頁的內容,通過查詢數據庫的所有數據在表格進行分頁瀏覽,因為數據量多,也叫海量分頁, 網
模擬(玩具謎題NOIP 2016 提高組 Day 1 第一題vijos2003)
順時針 std 字符 true cnblogs 中一 else point 整數和 描述 小南有一套可愛的玩具小人,它們各有不同的職業。 有一天,這些玩具小人把小南的眼鏡藏了起來。小南發現玩具小人們圍成了一個圈,它們有的面朝圈內,有的面朝圈外。如下圖: 這時sin