HWS计划 decryption 寒假逆向生涯(17/100)
生活随笔
收集整理的這篇文章主要介紹了
HWS计划 decryption 寒假逆向生涯(17/100)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
decryption
前奏
沒法搞,直接拖ida
全局
首先輸入flag,然后一個if判斷一下長度是否符合,不符合直接結束
然后再new處一個數組,接著一個加密函數,把加密后的存放在new出來的數組里,
最后把加密后的和已知數組buf進行比較,符合的話則成功
這個函數memcmp以前我在博客里寫過,這里,再給大家寫一遍。
int memcmp(const void *buffer1,const void *buffer2,size_t count );參數:
buffer1:第一個緩沖區。
buffer2:第二個緩沖區。
count:要比較的字符數。 (比較 wmemcmp) 的 memcmp、寬字符的字節數。
返回值:
| < 0 | buffer1 小于 buffer2 |
| 0 | buffer1 等同于 buffer2 |
| > 0 | buffer1 大于 buffer2 |
補充:
buffer1 和 buffer2 的第一個 計數 字符并返回指示它們關系的值。 非零返回值的符號是緩沖區中的第一個不同值對之差的符號。
核心
一個是數組buf(數組直接通過hex圖里面直接拷貝出來,然后加上0x即可),另一個是加密函數encrypt
v2和v3以及result沒用,就用來混淆
注意
那個i值一定要賦給一個字符,然后再用字符進行while循環的變更,否則的話把i值改變了,下面然后進行數組賦值時就出錯了。
錯誤示范:
do {d ^= char(i);c = 2 * (d & char(i));i = c&0xff;} while (c);正確示范:
e = char(i);do {d ^= e;c = 2 * (d & e);e = c&0xff;} while (c);代碼
#include<iostream> using namespace std; int main() {char a[]={ 0x12, 0x45, 0x10, 0x47, 0x19, 0x49, 0x49, 0x49, 0x1A, 0x4F, 0x1C, 0x1E, 0x52, 0x66, 0x1D, 0x52,0x66, 0x67, 0x68, 0x67, 0x65, 0x6F ,0x5F, 0x59, 0x58, 0x5E, 0x6D, 0x70, 0xA1, 0x6E, 0x70, 0xA3 };char b[32];char c;char d;char e;for (int i = 0; i <= 31; ++i) {d=a[i] ^ 0x23;e = char(i);do {d ^= e;c = 2 * (d & e);e = c&0xff;} while (c);b[i] = d;}for (int i = 0; i <= 31; i++) {cout << b[i];} }1e1a6edc1c52e80b539127fccd48f05a
總結
以上是生活随笔為你收集整理的HWS计划 decryption 寒假逆向生涯(17/100)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PECompact3.0
- 下一篇: PE结构导入表