ISCC2014-reverse

這是我做reverse的題解。在咱逆向之路上的mark一下,,水平有限,大牛見笑。

?

題目及題解鏈接:http://pan.baidu.com/s/1gd3k2RL

宗女齊姜

果然是僅僅有50分的難度,OD直接找到了flag.

?

找到殺手

這題用OD做非常麻煩。我改用IDA了。又是秒破

將圖中字符串輸入,程序生成了四張撲克牌圖片。題目讓依據密文判斷。就4個字符串,一個一個試最多4次就出來了,哈哈

?

?

避難母國

這題挺有意思的,總共要經過13次聽取建議,太麻煩,在第一次是Andy后,以后都用改變寄存器狀態的方式跳過剩下的環節。最后程序打印出flag。

?

流亡齊國

用不成OD了,用Reflector得到關鍵函數的源代碼

但是我不會C#啊,找到精通C#的同學得到解密函數,并取得了flag.

?

?

?

?

何去何從

這題貌似簡單。事實上就是簡單,當然做出來了就感覺簡單,事實上有一個陷阱,僅僅要發現了就OK了。

這道題非常有誘惑性,按正常的思路非常快就得到了一個flag-like的家伙。

是vc 6.0的程序,非常easy就找到了main函數

進入后

當中的凝視是所有做完后的凝視。第一遍時非常正常的跳過了當中凝視為“不能調”、“這才是關鍵”的那部分代碼,進入了凝視為“關鍵進入”的函數,

?

?

這個函數首先經過0x13次的循環生成“(3q^;^3lfjq&D7V4Hhd”,然后與輸入的字符串比較。相等則顯示“是這個么”,不等則顯示“錯了”。似乎flag已經找到了,真對不起200分的價值是不是?,但是提交時卻發現不對,難道要對這個字符串做什么變換么?僅僅能回去再細致看看程序了。

又到了這一步,按程序的意思是。jnz是一定會跳的,可是里邊的兩個函數有什么用呢,于是決定進去看看,強制改了跳轉。F8跳過第二個函數后,程序打印出

,于是進去看看。

到了這一步,

再跟進去瞧瞧,

這和之前生成的那個0x13長的偽flag的生成算法是一樣的。執行完后在內存中找到這個字符串“(3q&vf2vw%f7Vj9Ookj”,這個就是FLAG了!


逃離臨淄

?

執行程序如圖

在程序函數中找到了GetWindowTextA函數,下斷點,

在編輯框中隨便輸入點東西后點“注冊”。到斷點

調用兩次這個函數。得到注冊名和注冊碼。存在0x18CD98和0x18CDB8處

在下圖這個函數中會對注冊碼進行變形

進入后

004016C0? /$?8B5424 04???? mov edx,dword ptrss:[esp+0x4]

004016C4? |.?57??????????? push edi

004016C5? |.?8BFA????????? mov edi,edx

004016C7? |.?83C9 FF?????? or ecx,0xFFFFFFFF

004016CA? |.?33C0????????? xor eax,eax

004016CC ?|.?F2:AE???????? repne scas byte ptres:[edi]

004016CE? |.?F7D1????????? not ecx

004016D0? |.?49??????????? dec ecx

004016D1? |.?83F9 1F?????? cmp ecx,0x1F???????????????? 推斷長度是否為0x1f

004016D4? |.? 7406???????? je XCrackMe?004016DC

004016D6? |.?32C0????????? xor al,al

004016D8? |.?5F??????????? pop edi

004016D9? |.? C20800?????? retn 0x8

004016DC? |>?8B4424 0C???? mov eax,dword ptrss:[esp+0xC]

004016E0? |.?53??????????? push ebx

004016E1? |.?56??????????? push esi

004016E2? |.?8BF2????????? mov esi,edx

004016E4? |.?8BC8????????? mov ecx,eax

004016E6? |.?2BF0????????? sub esi,eax

004016E8? |.? BF1F000000?? mov edi,0x1F

004016ED? |>?8A040E??????? /mov al,byte ptrds:[esi+ecx]

004016F0? |.? 3C30???????? |cmp al,0x30

004016F2? |.? 7C17???? ????|jl XCrackMe?

0040170B

004016F4? |.? 3C39???????? |cmp al,0x39

004016F6? |.? 7F13???????? |jg XCrackMe?

0040170B

004016F8? |.?0FBEC0??????? |movsx eax,al

004016FB? |.?83E8 2B?????? |sub eax,0x2B

004016FE? |.? BB0A000000?? |mov ebx,0xA

00401703? |.? 99??????????? |cdq

00401704? |.?F7FB????????? |idiv ebx

00401706? |.?80C2 30?????? |add dl,0x30

00401709? |.? EB34???????? |jmp XCrackMe?0040173F???????? (數字-2B)/ A 取余

0040170B? |>?3C 41???????? |cmp al,0x41

0040170D? |.? 7C17???????? |jl XCrackMe?00401726

0040170F? |.? 3C5A???????? |cmp al,0x5A

00401711? |.? 7F13???????? |jg XCrackMe?00401726

00401713? |.?0FBEC0??????? |movsx eax,al

00401716? |.?83E8 34?????? |sub eax,0x34

00401719? |.? BB1A000000?? |mov ebx,0x1A

0040171E? |.?99??????????? |cdq

0040171F? |.?F7FB????????? |idiv ebx

00401721? |.?80C2 41?????? |add dl,0x41

00401724? |.? EB19???????? |jmp XCrackMe?

0040173F???????? (大寫-0x34) / 1A 取余

00401726? |>?3C 61???????? |cmp al,0x61

00401728? |.? 7C17???????? |jl XCrackMe?

00401741

0040172A ?|.? 3C7A???????? |cmp al,0x7A

0040172C? |.? 7F13???????? |jg XCrackMe?00401741

0040172E? |.?0FBEC0??????? |movsx eax,al

00401731? |.?83E8 54?????? |sub eax,0x54

00401734? |.? BB1A000000?? |mov ebx,0x1A

00401739? |.?99??????????? |cdq

0040173A? |.? F7FB????????? |idiv ebx

0040173C? |.?80C2 61?????? |add dl,0x61???????????????? (小寫-0x54) / 1A 取余

0040173F? |>?8AC2????????? |mov al,dl

00401741? |>?8801????????? |mov byte ptrds:[ecx],al

00401743? |.?41??????????? |inc ecx

00401744? |.?4F??????????? |dec edi

00401745? |.^ 75 A6???????? \jnz XCrackMe?004016ED

00401747? |.?5E??????????? pop esi

00401748? |.?5B??????????? pop ebx

00401749? |.? B001???????? mov al,0x1

0040174B? |.?5F??????????? pop edi

0040174C? \.? C20800?????? retn 0x8

跳出這個函數后

下面都是對變形后的字符串進行的推斷。

推斷了三位。

再然后

是對后十位的比較,將后十位變成整形后與EDI比較。edi由下圖函數得到

?

?

?

還好這個結果與后十位的內容無關。

?

當一切判定條件都通過后,就來到最后彈出對話框的地方。

?

?

這個注冊碼vscc11-695356-695356-6494939865是2014年8月1日過期

這個注冊碼是2015年八月1日到期? vscc11-695356-605356-6456326018

?

?咱如今的逆向水平也就僅僅能做到這了,剩下的題希望能從大牛那里得到經驗。也算從這次比賽得到的最大收獲了。

?

?

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

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

相關文章

python 獲取當前時間再往前幾個月_Python 中的時間和日期操作

Python中,對日期和時間的操作,主要使用這3個內置模塊: datetime 、 time 和 calendar 獲取當前時間對應的數字 開發程序時,經常需要獲取兩個代碼位置在執行時的時間差,比如,我們想知道某個函數執行大概耗費了多少時間,就可以使用time.time()來做。 import time before =…

Java BigDecimal restder()方法與示例

BigDecimal類的restder()方法 (BigDecimal Class remainder() method) Syntax: 句法: public BigDecimal remainder(BigDecimal divsr);public BigDecimal remainder(BigDecimal divsr, MathContext ma_co);remainder() method is available in java.math package.…

python程序需要編譯么_python需要編譯么

一個經常聽見的問題,那就是:Python是解釋型的語言嗎?它會被編譯嗎?這個問題沒有想象中那么好回答。和很多人認識世界一樣,習慣以一個簡單的模型去評判一些事物。而事實上,里面包含了很多很多的細節。通常的…

DevOps平臺中的自動化部署框架設計

本文目錄: 一、背景 二、我們的需求是什么? 三、概念澄清 四、概念模型 五、總體設計 六、關鍵點設計 七、總結 一、背景 說到自動化部署,大家肯定都會想到一些配置管理工具,像ansible,chef,puppet, saltstack等等。雖然這些工具給…

插入排序算法 ,遞歸實現_C程序實現遞歸插入排序

插入排序算法 ,遞歸實現The only difference between Insertion sort and Recursive Insertion Sort is that in the Recursive method, we start from placing the last element in its correct position in the sorted array instead of starting from the first. 插入排序和…

python虛擬機直接加載字節碼運行程序_第二章 python如何運行程序

一.python解釋器介紹Python解釋器是一種讓程序運行起來的程序。實際上,解釋器是代碼與機器的計算機硬件之間的軟件邏輯層。當Python包安裝在機器上后,它包含了一些最小化的組件:一個解釋器和支持的庫。二.python的視角當Python運行腳本時&…

Java LocalDate類| 帶示例的format()方法

LocalDate類format()方法 (LocalDate Class format() method) format() method is available in java.time package. format()方法在java.time包中可用。 format() method is used to format this LocalDate object by using the given DateTimeFormatter object. format()方法…

胃癌2019csco指南_2019 CSCO胃癌診療指南精華來了!

一文輕松get 2019 CSCO胃癌診療指南更新要點!文丨青青子衿 中山大學腫瘤防治中心來源丨醫學界腫瘤頻道近日,2019年CSCO指南發布會于南京召開。今天為大家推送的是2019 CSCO胃癌診療指南的最新更新,在發布專場中,來自華中科技大學同…

001_docker-compose構建elk環境

由于打算給同事分享elk相關的東西,搭建配置elk環境太麻煩了,于是想到了docker。docker官方提供了docker-compose編排工具,elk集群一鍵就可以搞定,真是興奮。好了下面咱們開始吧。 一、 https://github.com/deviantony/docker-elk $ cd /006_xxxallproject/005_docker/001_e…

Java即時類| toString()方法與示例

即時類toString()方法 (Instant Class toString() method) toString() method is available in java.time package. toString()方法在java.time包中可用。 toString() method is used to represent this Instant as a String by using the standards ISO-8601 format. toString…

learn opengl 中文_LearnOpenGL CN

歡迎來到OpenGL的世界歡迎來到OpenGL的世界。這個工程只是我(Joey de Vries)的一次小小的嘗試,希望能夠建立起一個完善的OpenGL教學平臺。無論你學習OpenGL是為了學業,找工作,或僅僅是因為興趣,這個網站都將能夠教會你現代(Core-p…

MYSQL5.7 日志管理

2019獨角獸企業重金招聘Python工程師標準>>> 慢查詢日志slow-query-log1 slow-query-log-filefile_name long_query_time1 #SQL執行多長時間以上會記錄到慢查詢日志,0~10s log_slow_admin_statementsOFF #在寫入慢查詢日志的語句中包含緩慢的管理語句。 …

duration java_Java Duration類| ofHours()方法與示例

duration javaDuration Class of Hours()方法 (Duration Class ofHours() method) ofHours() method is available in java.time package. ofHours()方法在java.time包中可用。 ofHours() method is used to represent the given hours in this Duration. ofHours()方法用于表示…

sumo的簡單應用_sumo快速運行簡單仿真實例詳細教程

本文旨在讓大家快速的了解sumo,并給出運行一個簡單的sumo的例子的教程,進而了解基本sumo工程的架構,使大家對該軟件產生興趣并持續學習下去,剛開始學習仿真的確枯燥,項目“跑起來”才是大家學習下去的動力,…

stl vector 函數_vector :: crbegin()函數,以及C ++ STL中的示例

stl vector 函數C vector :: crbegin()函數 (C vector::crbegin() function) vector::crbegin() is a library function of "vector" header, it is used to get the last element of a vector using const_reverse_iterator, it returns a const reverse iterator …

ReactNative學習筆記(二)Flex布局

flexDirection 決定主軸方向 column:垂直方向為主軸row:水平方向為主軸justifyContent 決定主軸元素排列方式 flex-startflex-endcenterspace-betweenspace-aroundalignItems 決定側軸元素排列方向 flex-startflex-endcenterbaselinestretch

cad導出 dxf后中文不顯示_CAD快速看圖 for Mac

CAD快速看圖 for Mac是一款非常小巧、快速、方便的DWG看圖工具,CAD快速看圖 Mac版可脫離AutoCAD最快速、最方便瀏覽DWG和DXF圖紙,支持二維或三維圖紙,支持高清、多文件和云字體,非常實用的一款CAD看圖軟件,CAD快速看圖…

scala運算符_Scala的所有符號運算符是什么意思?

scala運算符Scala的符號運算符 (Scalas symbolic operators) The symbolic operators in Scala are symbols that have a specific task that they perform when called in a Scala program. Scala library defines a lot of symbols that can be used while programming in Sc…

關于java.util.ConcurrentModificationException和remove倒數第二個元素

2019獨角獸企業重金招聘Python工程師標準>>> 首先是兩段代碼的執行結果&#xff1a; 代碼一&#xff1a; public class TestListRemove {public static void main(String[] args) {List<Integer> list new ArrayList<Integer>();list.add(1);list.add(…

linux 操作mysql 數據庫命令_Linux 操作數據庫命令

一、連接數據庫格式&#xff1a; mysql -h主機地址 -u用戶名 &#xff0d;p用戶密碼mysql -hlocalhost -uroot -p123注&#xff1a;-h,-u,-p 后面不加空格&#xff0c;進入數據庫操作后每個命令結尾都需加“&#xff1b;(分號)”二、退出MYSQL命令exit (回車)三、顯示所有數據庫…