普通视图

Received before yesterday

Ida Pro9

2025年5月14日 09:09

好长时间不曾登录那几个破解论坛了,前几天心血来潮登录了一下。看到 ida 更新了,已经到了 9,之前自己下载的上一个版本还是 8.3,中间 8.5 出现的时候竟然没下载过。

这曾经是自己赖以谋生的技能,也是自己的工作。只是后来一步一步的调整,竟然离逆向分析越来越远了,前段时间还有猎头找到自己,表示有广东的岗位,薪资待遇感觉还不错,不过查了一下是初创公司。

现在这个年龄似乎也承受不住太多的变化了,前途毕竟没有那么明亮。大公司不好过,小公司更不好过,而至于初创公司这就更难了。随便拉一个文件进去,选择解释器的界面变了,其他的感觉还是原来的样子。十几年过去了,似乎什么都变了,似乎有什么都没变。

曾经也曾在这样的代码里挣扎求生,只是,现在换了个地方挣扎。

版本号也到了 9.1,这么多年,自己竟然就用过一次正版授权。不是不想买,而是的确有些贵,并且现在也不是自己赖以生存的工具,所以就酱紫吧。

分享个磁力链接,需要自取:

magnet:?xt=urn:btih:f24cfadb8a66b343bf1ff4f0c1386a5f6991c818&dn=ida91

当然,也不一定非得从这里下,那些大的论坛都有下载地址,各种网盘的地址。

现在网盘越来越多了,反而越来也不喜欢网盘了。

毕竟不可能每个网盘都冲个会员,毕竟不充会员那 100k 的下载速度下载这 3G 多的文件得需要好几天。

切!

 

The post Ida Pro9 appeared first on obaby@mars.

  •  

Cursor 另类应用 — 逆向分析

2025年3月14日 13:28

hacker

昨天登录后台的时候,发现 loginpress 的设置界面挂了,所有的数据样式都是 hidden。让 deepseek 给分析了一通,都是废话,没什么卵用。

今天上午直接让 cursor 分析了一下代码,让给出解决方案,发现依然没什么效果:

不过查看页面元素的时候发现了一段提示:

<tr class="secret_key_v2_invisible" style="display: none;"><th scope="row"><label for="loginpress_setting[secret_key_v2_invisible]">Secret Key</label></th><td><input type="text" class="regular-text" id="loginpress_setting[secret_key_v2_invisible]" name="loginpress_setting[secret_key_v2_invisible]" value=""><p class="description">Get <a href="https://www.google.com/recaptcha/admin" target="_blank"> reCaptcha</a> secret key. <br> <span class="alert-note">Make sure you are adding right  secret key for this domain. If it's incorrect may be you'r not able to access your website.</span></p></td></tr>

让 cusour 分析了一通,依然没什么效果:

不过此时已经基本确认还是授权的问题了,基于上面的废话改起来难度较大,搜索了一下,找了一个新版本的 loginpress pro。

https://wpe98.com/loginpress-pro-nulled/

按照文件的方法直接添加 hook 代码:

<?php
function bypass_license_verification() {
    add_filter('loginpress_license_check', '__return_true');
    add_action('admin_notices', function() {
        echo '<div class="notice notice-success"><p>License successfully nulled for demonstration purposes!</p></div>';
    });
}
add_action('init', 'bypass_license_verification');
?>

此时后台显示的确 ok 了,虽然功能已经激活了,但是页面看起来有些蛋疼,显示没授权: 

根据提示信息搜索就会发现代码位于loginpress-pro 2/classes/loginpress-main.php

大概浏览下代码,发现基本数据都在所谓的授权信息中license_data的结构内,直接让 cursor 给生成一个结构:

此时直接修改授权代码为:

public static function get_registration_data() {
        $license_data = array(
            'success' => true|false,      // 布尔值,表示许可证验证是否成功
            'license' => 'valid',         // 字符串,许可证状态,可能的值包括: valid, invalid, expired, revoked, missing, site_inactive, item_name_mismatch, no_activations_left
            'error' => '',               // 字符串,如果有错误时的错误代码
            'expires' => '2050-10-10',             // 字符串,许可证过期日期,可以是具体日期或 'lifetime'
            'price_id' => 4,            // 整数,许可证价格ID,用于确定许可证类型:
                                        // 1 = Personal
                                        // 2 = Small Business
                                        // 3 或 6 = Agency
                                        // 4 = Ultimate
                                        // 7 = Startup
        );
return $license_data;
}

测试了一下没效果,继续看代码,发现外面还套嵌了一层,cursor 给继续处理一下:

继续调整代码为:

$result = array(
            'license_key' => '',         // 字符串,许可证密钥
            'license_data' => array(     // 数组,许可证详细数据
                'success' => true|false,      // 布尔值,表示许可证验证是否成功
                'license' => 'valid',         // 字符串,许可证状态,可能的值包括: valid, invalid, expired, revoked, missing, site_inactive, item_name_mismatch, no_activations_left
                'error' => '',               // 字符串,如果有错误时的错误代码
                'expires' => '2050-10-10',             // 字符串,许可证过期日期,可以是具体日期或 'lifetime'
                'price_id' => 4,            // 整数,许可证价格ID,用于确定许可证类型:
                                            // 1 = Personal
                                            // 2 = Small Business
                                            // 3 或 6 = Agency
                                            // 4 = Ultimate
                                            // 7 = Startup
            ),
            'error_message' => '',      // 字符串,错误信息
        );
        return $result;

此时再看效果,就完美啦:

 

The post Cursor 另类应用 — 逆向分析 appeared first on obaby@mars.

  •  

WordPress 后台速度优化

2025年2月19日 10:02

昨天下午的时候,杜郎杜郎发消息,问有没有设么想干的事情,或者 wp 想要的插件。当时信誓旦旦的说没什么想写的东西呢。

等到了晚上的时候,发现wp 的后台加载速度变得贼慢,需要等待 N 秒才能打开,这就变得很奇怪,让自己一度以为是自己升级了 Envira Gellery 插件导致的,于是把插件版本回滚了。

但是,回滚之后速度并没有明显的改观,这就变得很恶心了。

还是老办法打开 query monitor,发现后台打开请求时间到了十几秒,主要问题在几个 http 请求上:

这几个 http 都超时了,访问的是 api.wordpress.org,直接在服务器上 curl 访问也有一定的概率会超时,即使修改 host 绑定 ip 之后改观依然不大。

并且这个 ip 地址全球解析都是一样的,也就是说没法更换 ip 地址来访问别的服务器。当然,要解决这个问题最直接的办法是直接禁用 wp 的更新检查,但是这个方法我并不是十分喜欢,毕竟有时候更新修复的是一些严重的漏洞。那么除此之外就只能坐以待毙了?

这个 ip 访问不稳定应该还是大墙导致的,既然如此,那么用自己的服务器反代应该会好一些。直接分配一个二级域名,到服务器进行反代:

location / {

        proxy_pass https://198.143.164.251;
        proxy_http_version 1.1;
proxy_set_header Accept-Encoding "";
proxy_set_header Host api.wordpress.org;

}

需要注意的是需要将 Host 设置为Host api.wordpress.org,否则访问的时候会直接跳到 wp 的首页。

修改 wp 的 update.php 文件:

将检查更新的地址替换掉,再次访问:

此时请求的域名就变成自己的域名了,并且超时的问题基本解决掉。剩下的就是两个慢查询:

这两个是 wp 后台登录的保护插件导致的,看下数据库已经记录了 28 万条:

 

清空记录之后,一切就正常了。

只剩下一个错误,这个目前影响不大,就先不管了。

然而,在看到有两个更新,在点更新的时候又崩了。

提示的 object cache 导致的,这个插件用的版本还是比较老的,网上找个新版本,发现处理的并不彻底,各种提示信息以及按钮不能用,自己尝试修改了一下,去掉了一些验证。自己折腾到十一点多,有点困了,于是就找到了杜郎。

然而,事情貌似没那么简单,早上看了一下,插件已经自己停止了:

并且 enable cache 的按钮是灰的,还是授权校验没通过导致的。

至于这个怎么解决,只能仔细研究代码了,或者靠杜郎杜郎研究代码,嘻嘻。

不过得赞一下杜郎杜郎给提供的头图视频啊,还是蛮惊艳的。效果出奇的好呢。

最终在独狼的提示下,感觉还是修改license.php文件靠谱,object cache pro 1.22如果出现授权为 invalid,将文件替换为下面的内容即可:

温馨提示: 此处隐藏内容需要发表评论,并且审核通过后才能查看。
(发表评论请勾选 在此浏览器中保存我的显示名称、邮箱地址和网站地址,以便下次评论时使用。
(请仔细检查自己的昵称和评论内容,以免被识别为垃圾评论而导致无法正常审核。)

 

  •  

微博图片拯救 — 妈妈再也不用担心图片被夹看不到啦!🤓

2025年2月16日 20:51

过了这好几年之后,总感觉自己已经从一个技术博主,变成了一个生活博主。

年龄越来越大了之后,探索能力,学习能力逐渐的下降。接受新事物的能力也日渐式微,总感觉想做一些东西而力不从心。

很多东西多年以前就知道了,但是想自己去做的时候却总感觉没什么头绪,不知道该从哪里开始。

今天又看到教主转的微博,同样原内容图片被夹了。

教主发的那个这就发挥作用了,是一张截图:

这么个东西。

至于原理,很久之前教主就大概提过,说出来也简单,就是利用cdn的缓存删除时间差,在节点未删除之前遍历所有的cdn节点去搜索图片。知道原理之后,要实现也简单,目前微博图片主要有四个域名+两个alias:

weibo_cdn_domain_list = [
    'wx1.sinaimg.cn',
    'wx2.sinaimg.cn',
    'wx3.sinaimg.cn',
    'wx4.sinaimg.cn',
    'weiboimgwx.gslb.sinaedge.com',
    'weiboimgwx.grid.sinaedge.com'
]

既然有了域名,那么也简单,通过python库直接解析所有的地址即可:

def get_ipv4_ips(domain_name):
    try:
        ipv4_addresses = []
        answers = dr.resolve(domain_name, "A")
        for rdata in answers:
            if str(rdata).startswith("192."):
                continue
            else:
                ipv4_addresses.append(str(rdata))
        return ipv4_addresses
    except Exception as e:
        print(e)
        return None


def get_ipv6_ips(domain_name):
    try:
        ipv6_addresses = []
        answers = dr.resolve(domain_name, "AAAA")
        for rdata in answers:
            if str(rdata).startswith("::"):
                continue
            else:
                ipv6_addresses.append(str(rdata))
        return ipv6_addresses
    except Exception as e:
        print(e)
        return None


def get_all_ips():
    ip_dict_list = []

    for domain in weibo_cdn_domain_list:
        ips = get_ipv4_ips(domain)
        v6_ips = get_ipv6_ips(domain)
        print(domain, ips)
        domain_ips = {
            'domain': domain,
            'ipv4': ips,
            'ipv6': v6_ips
        }
        ip_dict_list.append(domain_ips)
    return ip_dict_list

然而,这么高却也存在问题,就是拿到的ip地址都是国内解析到的,与命令查询到的一致:

四个域名加起来不多几十个ip地址,然而,仔细观察教主的图片会发现,解析出来的ip大约有2000+按照图片进度猜测。

即使加上ipv6的也远远少于教主的ip地址数量。

并且尝试下载的时候全部失败了,无法遍历到删除的文件,再次查看教主的图片,搜了下ip地址,并不是国内的:

那么,可能的原因在于,教主拿到了所有的ip地址,包括海外的,并且海外节点的删除时间会更晚,这样能找到被夹的图片的概率自然也越大。

那么直接去itdog.cn拉取所有的ip地址列表:

一个域名对应800+ip地址,那么这么看来基本跟教主的数量就能对上了。剩下的就简单了,告知思路,剩下的大家可以自由发挥了,主要代码可以暂停录像看屏幕代码:

1.将所有的域名解析为ip
2.讲ip与域名组装为:
domain_ips = {
            'domain': domain,
            'ipv4': ips,
            'ipv6': v6_ips
        }
格式。
3.遍历域名下的所有ip地址,拼接请求链接指定host。
4.针对请求数据进行处理,目前已知默认的占位符图片长度为:6067, 8308, 8844这几个,对于返回长度10000以下的,可以直接抛弃掉。
5.请求到数据之后保存为文件即可。

效果图:

视频演示:

 

  •  

去掉UkeySoft Screen Recorder 8.0.0 弹窗

2024年12月8日 10:12

之前屏幕录像和截图一直用的UkeySoft Screen Recorder ,直到换了4k显示器之后发现不好使了,录像的时候直接崩溃。后来换了windows自带的snipping tool。

今天又看了下,最新版成了8.0

奔溃的问题解决了,可以录制,但是两个4k屏幕一起录制还是有问题。

使用7.0的注册信息,可以完成本地注册,但是重启之后就会提示授权校验错误:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\GSLLC\21881]
"InitTime"=dword:61250d35
"WorkMode"=dword:00000002
"Registerd"=dword:00000001
"SN"="70807-07524-21881-57632-20916-75753"
"EMail"="root@obaby.org.cn"
"LastTime"="20210825"

旧版本的还是32位的可执行文件,新版本已经是64位的了,直接x64dbg载入。

代码没有任何的混淆加密,对所有的CheckSNOnline函数下断点,运行:

启动后会断在下面的地址:

0000000000754345                         | E8 962CFFFF                        | call <JMP.&CheckSNOnLine2>                                                   |
000000000075434A                         | 89C3                               | mov ebx,eax                                                                  |
000000000075434C                         | 48:8B45 28                         | mov rax,qword ptr ss:[rbp+28]                                                |
0000000000754350                         | 48:8378 58 00                      | cmp qword ptr ds:[rax+58],0                                                  |
0000000000754355                         | 75 14                              | jne screenrecorderpro.75436B                                                 |
0000000000754357                         | 48:8B45 28                         | mov rax,qword ptr ss:[rbp+28]                                                |
000000000075435B                         | 48:8D48 58                         | lea rcx,qword ptr ds:[rax+58]                                                |
000000000075435F                         | 48:8D15 3E010000                   | lea rdx,qword ptr ds:[7544A4]                                                | 00000000007544A4:L"null"
0000000000754366                         | E8 E5BFCBFF                        | call screenrecorderpro.410350                                                |
000000000075436B                         | 83FB 01                            | cmp ebx,1                                                                    |
000000000075436E                         | 75 25                              | jne screenrecorderpro.754395                                                 |
0000000000754370                         | 48:8B45 28                         | mov rax,qword ptr ss:[rbp+28]                                                |
0000000000754374                         | 48:8985 80000000                   | mov qword ptr ss:[rbp+80],rax                                                |
000000000075437B                         | 48:8D05 BEF5FFFF                   | lea rax,qword ptr ds:[753940]                                                |
0000000000754382                         | 48:8945 78                         | mov qword ptr ss:[rbp+78],rax                                                |
0000000000754386                         | 48:8B4D 28                         | mov rcx,qword ptr ss:[rbp+28]                                                |
000000000075438A                         | 48:8D55 78                         | lea rdx,qword ptr ss:[rbp+78]                                                |
000000000075438E                         | E8 DDE7D5FF                        | call screenrecorderpro.4B2B70                                                |
0000000000754393                         | EB 62                              | jmp screenrecorderpro.7543F7                                                 |
0000000000754395                         | 83FB FF                            | cmp ebx,FFFFFFFF                                                             |
0000000000754398                         | 75 22                              | jne screenrecorderpro.7543BC                                                 |
000000000075439A                         | 48:8B45 28                         | mov rax,qword ptr ss:[rbp+28]                                                |
000000000075439E                         | 48:8945 70                         | mov qword ptr ss:[rbp+70],rax                                                |
00000000007543A2                         | 48:8D05 67F6FFFF                   | lea rax,qword ptr ds:[753A10]                                                | 0000000000753A10:"UVSH冹PH嬱H塎0H荅8"
00000000007543A9                         | 48:8945 68                         | mov qword ptr ss:[rbp+68],rax                                                |
00000000007543AD                         | 48:8B4D 28                         | mov rcx,qword ptr ss:[rbp+28]                                                |
00000000007543B1                         | 48:8D55 68                         | lea rdx,qword ptr ss:[rbp+68]                                                |
00000000007543B5                         | E8 B6E7D5FF                        | call screenrecorderpro.4B2B70                                                |
00000000007543BA                         | EB 3B                              | jmp screenrecorderpro.7543F7                                                 |
00000000007543BC                         | 83FB 02                            | cmp ebx,2                                                                    |
00000000007543BF                         | 75 36                              | jne screenrecorderpro.7543F7                                                 |
00000000007543C1                         | 48:8D8D 8C010000                   | lea rcx,qword ptr ss:[rbp+18C]                                               |
00000000007543C8                         | 48:8D95 88000000                   | lea rdx,qword ptr ss:[rbp+88]                                                |
00000000007543CF                         | E8 EC2BFFFF                        | call <JMP.&CheckSNWhenRegist2>                                               |
00000000007543D4                         | 48:8B4D 28                         | mov rcx,qword ptr ss:[rbp+28]                                                |
00000000007543D8                         | 8941 48                            | mov dword ptr ds:[rcx+48],eax                                                |

7.0我修改的verify.dll文件,这里直接修改主程序,将call <JMP.&CheckSNOnLine2>  一行nop掉。

修补源文件,再次运行就一切ok啦。

  •  
❌