OPlayer Lite 最新去广告

问问题: http://bbs.iosre.com/forum.php?mod=viewthread&tid=707&page=1&extra=#pid3881

lldb 命令 : http://objccn.io/issue-19-2/

列举目录:~~~~~~~~~~~~~
cy#

[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]

#"file:///var/mobile/Containers/Data/Application/235BFE91-3A0F-4728-9AEB-CCB321D30E92/Documents/"

Panda-iphone:/var/mobile/Containers/Data/Application/235BFE91-3A0F-4728-9AEB-CCB321D30E92/Documents root#
脱壳~~~~~~~~~~~~~~~~~~~~~~~~~~
DYLD_INSERT_LIBRARIES=dumpdecrypted7.dylib /var/mobile/Containers/Bundle/Application/EA468FAA-CC33-4BF7-B6B1-4F933CA4D7A2/OPlayer\ Lite.app/OPlayer\ Lite

\mach-o decryption dumper
DISCLAIMER: This tool is only meant for security research purposes, not for application crackers.

[+] detected 32bit ARM binary in memory.
[+] offset to cryptid found: @0x4abc(from 0x4000) = abc
[+] Found encrypted data at address 00004000 of length 23592960 bytes - type 1.
[+] Opening /private/var/mobile/Containers/Bundle/Application/EA468FAA-CC33-4BF7-B6B1-4F933CA4D7A2/OPlayer Lite.app/OPlayer Lite for reading.
[+] Reading header
[+] Detecting header type
[+] Executable is a plain MACH-O image
[+] Opening OPlayer Lite.decrypted for writing.
[+] Copying the not encrypted start of the file
[+] Dumping the decrypted data into the file
[+] Copying the not encrypted remainder of the file
[+] Setting the LC_ENCRYPTION_INFO→cryptid to 0 at offset abc
[+] Closing original file
[+] Closing dump file

class-dump -H -I xxx -o xxx.h

搜索广告类 ADBannerView
PlayViewController.h

#import "ADBannerViewDelegate.h"
#import "GADBannerViewDelegate.h"
@class ADBannerView, AVAssetReader, AVPlayer, AVPlayerDemoPlaybackView,
AVPlayerItem, FloatingView, GADBannerView, HTTPServer, InfoViewController,
MPVolumeView, NSDictionary, NSMutableArray, NSString, NSTimer, NSURL,
OSMusicMetaInfo, OSPlayerHelper, PlaySeekView, PlayerView, RoundedRectView,
SubtitleLabel, UIActivityIndicatorView, UIButton, UIImage, UIImageView, UILabel,
UINavigationController, UIView, WBEngine;__attribute__((visibility("hidden")))
@interface PlayViewController : UIViewController <ADBannerViewDelegate,
GADBannerViewDelegate, UIAlertViewDelegate, WBEngineDelegate,
WBLogInAlertViewDelegate, WBSendViewDelegate, RNGridMenuDelegate>
{ADBannerView *iAdView;GADBannerView *gAdView;····
}@property(retain, nonatomic) ADBannerView *iAdView; // @synthesize iAdView;

查看某个类的 属性在哪里~~~~~
cy# [[UIWindow keyWindow] recursiveDescription] 也可以直接 reveal 查看

检测 dylib 版本信息~~~~
1)➜ DynamicLibraries lipo -info OPlayer.dylib
Non-fat file: OPlayer.dylib is architecture: arm64

2)➜ DynamicLibraries file OPlayer.dylib
OPlayer.dylib: Mach-O 64-bit dynamically linked shared library

3)snakeninnys-MacBook:~ snakeninny$ otool -h /Users/snakeninny/Code/SMSNinja(bigboss)/SMSNinjaNow/layout/Library/MobileSubstrate/DynamicLibraries/libsmsninja.dylib
/Users/snakeninny/Code/SMSNinja(bigboss)/SMSNinjaNow/layout/Library/MobileSubstrate/DynamicLibraries/libsmsninja.dylib (architecture armv7):
Mach headermagic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags0xfeedface      12          9  0x00          6    27       3336 0x00100085
/Users/snakeninny/Code/SMSNinja(bigboss)/SMSNinjaNow/layout/Library/MobileSubstrate/DynamicLibraries/libsmsninja.dylib (architecture arm64):
Mach headermagic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags0xfeedfacf 16777228          0  0x00          6    29       3920 0x00100085
armv7和armv7s的指令长度都是32位,可以混用,但arm64指令长度是64位,不能与32位指令混用
➜ DynamicLibraries otool -h OPlayer.dylib
OPlayer.dylib:
Mach headermagic cputype cpusubtype caps filetype ncmds sizeofcmds flags
0xfeedfacf 16777228 0 0x00 6 23 2296 0x00100085
如果有64位的版本,magic应该是0xfeedfacf
不是64位就是 0xfeedface

描述arm7/7s/64 的关系
Jan 12 18:20:15 Panda-iphone OPlayer Lite[5050]: MS:Error: dlopen(/Library/MobileSubstrate/DynamicLibraries/OPlayer.dylib, 9): no suitable image found. Did find:
/Library/MobileSubstrate/DynamicLibraries/OPlayer.dylib: mach-o, but wrong architecture

这一句的意思就是你的dylib指令集不对。这应该是因为OPlayer Lite的指令集是armv7/7s,而你的dyllib是arm64,指令集不能混用造成的。你把ARCHS里多加一个armv7,然后重新试试,应该就可以了

刚开始 是测试 ADBannerView 的iAdView 对象在哪里

#import <iAd/ADBannerView.h>@interface PlayViewController : UIViewController
@property(retain, nonatomic) ADBannerView *iAdView; // @synthesize iAdView;
@end%hook ADBannerView
- (void)bannerViewDidLoadAd:(ADBannerView *)arg1
{%orig;NSLog(@"123321bannerViewDidLoadAd_arg1:%@",arg1);//has not to execute
}
%end%hook PlayViewController
- (void)viewDidLoad
{%orig;NSLog(@"123321viewDidLoadAdView:%@",self.iAdView);id gAdView = MSHookIvar<id>(self,"gAdView");//检测存在NSLog(@"123321viewDidLoadgAdView:%@",gAdView);
}
%end
·········································
{ Filter = { Bundles = ( "com.olimsoft.oplayer.lite" ); }; }
·········································
THEOS_DEVICE_IP = 127.0.0.1
THEOS_DEVICE_PORT = 2222
ARCHS = armv7
TARGET = iPhone:8.1include theos/makefiles/common.mkTWEAK_NAME = OPlayer
OPlayer_FILES = Tweak.xm
OPlayer_FRAMEWORKS = UIKit iAdinclude $(THEOS_MAKE_PATH)/tweak.mkafter-install::install.exec "killall -9 OPlayer\ Lite"
·········································
Panda-iphone:~ root# grep 123321 /var/log/syslog
Jan 20 00:00:59 Panda-iphone OPlayer Lite[691]: 123321viewDidLoadAdView:(null)
Jan 20 00:00:59 Panda-iphone OPlayer Lite[691]: 123321viewDidLoadgAdView:(null)

换函数 HOOK planAds ~~~~~~~~~~~~~~~ 可以IDA 去搜索

#import <iAd/ADBannerView.h>@interface PlayViewController : UIViewController
@property(retain, nonatomic) ADBannerView *iAdView; // @synthesize iAdView;
@end@interface GADBannerView : UIView
@end
%hook PlayViewController
- (void)viewDidLoad
{%orig;NSLog(@"123321viewDidLoadAdView:%@",self.iAdView);//检测存在 to be nullid gAdView = MSHookIvar<id>(self,"gAdView");//检测存在 to be nullNSLog(@"123321viewDidLoadgAdView:%@",gAdView);
}
- (void)planAds
{%orig;NSLog(@"123321planAds_iAdView:%@",self.iAdView);//id gAdView = MSHookIvar<id>(self,"gAdView");//NSLog(@"123321planAds_gAdView:%@",gAdView);
}
%end
·········································
Jan 20 00:24:27 Panda-iphone OPlayer Lite[980]: 123321viewDidLoadAdView:(null)
Jan 20 00:24:27 Panda-iphone OPlayer Lite[980]: 123321viewDidLoadgAdView:(null)
Jan 20 00:24:27 Panda-iphone OPlayer Lite[980]: 123321planAds_iAdView:(null)
Jan 20 00:24:27 Panda-iphone OPlayer Lite[980]: 123321planAds_gAdView:<GADBannerView: 0x80814a0; frame = (0 0; 320 50); clipsToBounds = YES; layer = <CALayer: 0x26af950>>

隐藏函数:

#import <iAd/ADBannerView.h>@interface PlayViewController : UIViewController
@property(retain, nonatomic) ADBannerView *iAdView; // @synthesize iAdView;
@property(retain, nonatomic) UIView *localAdView; // @synthesize localAdView;
@end@interface GADBannerView : UIView
@end%hook PlayViewController
- (void)viewDidLoad
{%orig;NSLog(@"123321viewDidLoad_iAdView:%@",self.iAdView);//检测存在 to be nullNSLog(@"123321viewDidLoad_localAdView:%@",self.localAdView);//检测存在 to be nullid gAdView = MSHookIvar<id>(self,"gAdView");//检测存在 to be nullNSLog(@"123321viewDidLoad_gAdView:%@",gAdView);
}
- (void)planAds
{%orig;NSLog(@"123321planAds_iAdView:%@",self.iAdView);//检测存在 to be nullNSLog(@"123321planAds_localAdView:%@",self.localAdView);//检测存在 not to be null
self.localAdView.hidden =YES;GADBannerView * gAdView = MSHookIvar<GADBannerView *>(self,"gAdView");//检测存在 not be nullNSLog(@"123321planAds_gAdView:%@",gAdView);gAdView.hidden = YES;
}
%end
·········································
Jan 20 00:38:16 Panda-iphone OPlayer Lite[1402]: 123321viewDidLoad_iAdView:(null)
Jan 20 00:38:16 Panda-iphone OPlayer Lite[1402]: 123321viewDidLoad_localAdView:(null)
Jan 20 00:38:16 Panda-iphone OPlayer Lite[1402]: 123321viewDidLoad_gAdView:(null)
Jan 20 00:38:16 Panda-iphone OPlayer Lite[1402]: 123321planAds_iAdView:(null)
Jan 20 00:38:16 Panda-iphone OPlayer Lite[1402]: 123321planAds_localAdView:<UIView: 0x814ebf0; frame = (0 0; 320 50); layer = <CALayer: 0x8136320>>
Jan 20 00:38:16 Panda-iphone OPlayer Lite[1402]: 123321planAds_gAdView:<GADBannerView: 0x81580b0; frame = (0 0; 320 50); clipsToBounds = YES; layer = <CALayer: 0x2685900>>

看看 是谁 调用的gAdView setDelegate:self 也就是 [GADBannerView delegate]
IDA 找到 下断 走过函数看看~~~~

__text:000F0AF0     ; void __cdecl -[GADBannerView setDelegate:](struct GADBannerView *self, SEL, id)
__text:000F0AF0     __GADBannerView_setDelegate__           ; DATA XREF: __objc_const:017A0048o
__text:000F0AF0
__text:000F0AF0     var_10          = -0x10
__text:000F0AF0
__text:000F0AF0 000                 STMFD           SP!, {R4-R7,LR}
__text:000F0AF4 014                 ADD             R7, SP, #0xC
__text:000F0AF8 014                 STR             R8, [SP,#0xC+var_10]!
__text:000F0AFC 018                 MOV             R5, #(:lower16:(selRef_slot - 0xF0B14))
__text:000F0B00 018                 MOV             R8, R0
__text:000F0B04 018                 MOVT            R5, #(:upper16:(selRef_slot - 0xF0B14))
__text:000F0B08 018                 MOV             R0, R2
__text:000F0B0C 018                 LDR             R5, [PC,R5] ; selRef_slot ; "slot"
__text:000F0B10 018                 BL              _objc_retain
__text:000F0B10
__text:000F0B14 018                 MOV             R6, R0
__text:000F0B18 018                 MOV             R0, R8
__text:000F0B1C 018                 MOV             R1, R5
__text:000F0B20 018                 BL              _objc_msgSend
__text:000F0B20
__text:000F0B24 018                 MOV             R7, R7
__text:000F0B28 018                 BL              _objc_retainAutoreleasedReturnValue
__text:000F0B28
__text:000F0B2C 018                 MOV             R1, #(:lower16:(selRef_delegateManager - 0xF0B40))
__text:000F0B30 018                 MOV             R5, R0
__text:000F0B34 018                 MOVT            R1, #(:upper16:(selRef_delegateManager - 0xF0B40))
__text:000F0B38 018                 LDR             R1, [PC,R1] ; selRef_delegateManager ; "delegateManager"
__text:000F0B3C 018                 BL              _objc_msgSend
__text:000F0B3C
__text:000F0B40 018                 MOV             R7, R7
__text:000F0B44 018                 BL              _objc_retainAutoreleasedReturnValue
__text:000F0B44
__text:000F0B48 018                 MOV             R1, #(:lower16:(selRef_setBannerDelegate_ - 0xF0B60))
__text:000F0B4C 018                 MOV             R2, R6
__text:000F0B50 018                 MOVT            R1, #(:upper16:(selRef_setBannerDelegate_ - 0xF0B60))
__text:000F0B54 018                 MOV             R4, R0
__text:000F0B58 018                 LDR             R1, [PC,R1] ; selRef_setBannerDelegate_ ; "setBannerDelegate:"
__text:000F0B5C 018                 BL              _objc_msgSend
__text:000F0B5C
__text:000F0B60 018                 MOV             R0, R6
__text:000F0B64 018                 BL              _objc_release
__text:000F0B64
__text:000F0B68 018                 MOV             R0, R4
__text:000F0B6C 018                 BL              _objc_release
__text:000F0B6C
__text:000F0B70 018                 MOV             R0, R5
__text:000F0B74 018                 BL              _objc_release
__text:000F0B74
__text:000F0B78 018                 MOV             R1, #(:lower16:(selRef_slot - 0xF0B8C))
__text:000F0B7C 018                 MOV             R0, R8
__text:000F0B80 018                 MOVT            R1, #(:upper16:(selRef_slot - 0xF0B8C))
__text:000F0B84 018                 LDR             R1, [PC,R1] ; selRef_slot ; "slot"
__text:000F0B88 018                 BL              _objc_msgSend
__text:000F0B88
__text:000F0B8C 018                 MOV             R7, R7
__text:000F0B90 018                 BL              _objc_retainAutoreleasedReturnValue
__text:000F0B90
__text:000F0B94 018                 MOV             R1, #(:lower16:(selRef_delegateManager - 0xF0BA8))
__text:000F0B98 018                 MOV             R4, R0
__text:000F0B9C 018                 MOVT            R1, #(:upper16:(selRef_delegateManager - 0xF0BA8))
__text:000F0BA0 018                 LDR             R1, [PC,R1] ; selRef_delegateManager ; "delegateManager"
__text:000F0BA4 018                 BL              _objc_msgSend
__text:000F0BA4
__text:000F0BA8 018                 MOV             R7, R7
__text:000F0BAC 018                 BL              _objc_retainAutoreleasedReturnValue
__text:000F0BAC
__text:000F0BB0 018                 MOV             R1, #(:lower16:(selRef_setAdView_ - 0xF0BC8))
__text:000F0BB4 018                 MOV             R2, R8
__text:000F0BB8 018                 MOVT            R1, #(:upper16:(selRef_setAdView_ - 0xF0BC8))
__text:000F0BBC 018                 MOV             R5, R0
__text:000F0BC0 018                 LDR             R1, [PC,R1] ; selRef_setAdView_ ; "setAdView:"
__text:000F0BC4 018                 BL              _objc_msgSend
__text:000F0BC4
__text:000F0BC8 018                 MOV             R0, R5
__text:000F0BCC 018                 BL              _objc_release
__text:000F0BCC
__text:000F0BD0 018                 MOV             R0, R4
__text:000F0BD4 018                 LDR             R8, [SP+0x10+var_10],#4
__text:000F0BD8 014                 LDMFD           SP!, {R4-R7,LR}
__text:000F0BDC 000                 B               _objc_release
__text:000F0BDC
__text:000F0BDC     ; End of function -[GADBannerView setDelegate:]

Panda-iphone:~ root# debugserver *:1234 -a 1657

➜ panda lldb
(lldb) process connect connect://localhost:1234

error: unable to find section for section 35
error: unable to find section for section 35
error: unable to find section for section 34
error: unable to find section for section 33 等很久~~~~~但不影响调试

(lldb) image list -o -f
[ 0] 0x00000000 /private/var/mobile/Containers/Bundle/Application/EA468FAA-CC33-4BF7-B6B1-4F933CA4D7A2/OPlayer Lite.app/OPlayer Lite(0x0000000000004000)
[ 1] 0x02540000 /Library/MobileSubstrate/MobileSubstrate.dylib(0x0000000002540000)
[ 2] 0x0a788000 /usr/lib/libbz2.1.0.dylib(0x000000003916b000)
[ 3] 0x0a788000 /usr/lib/libSystem.B.dylib(0x0000000038f46000)

1) 在函数末尾 000F0BDC下断,

000F0BDC + 0x00000000 =000F0BDC
(lldb) ni
Process 2525 stopped
* thread #1: tid = 0x13f6c, 0x000f0bdc OPlayer Lite`� + 2795, queue = 'com.apple.main-thread', stop reason = instruction step overframe #0: 0x000f0bdc OPlayer Lite`� + 2795
OPlayer Lite`� + 2795:
-> 0xf0bdc:  b      0x1365bc40xf0be0:  push   {r4, r5, r6, r7, lr}0xf0be4:  movw   r1, #0x4b8c0xf0be8:  add    r7, sp, #0xc
(lldb) finish
Process 2525 stopped
* thread #1: tid = 0x13f6c, 0x002bcde0 OPlayer Lite, queue = 'com.apple.main-thread', stop reason = step outframe #0: 0x002bcde0 OPlayer Lite
OPlayer Lite` + 246184:
-> 0x2bcde0:  movw   r0, #0x6fa20x2bcde4:  movs   r2, #0x00x2bcde6:  movt   r0, #0x1540x2bcdea:  add    r0, pc

执行finish 可以找到调用者
-[PlayViewController planAds]

2)在函数头部 查看 sp 查找 LR 保存的时返回地址
(lldb) x/1x -c 90 0x0253e974
0x0253e974: 0x43a00000 0x42480000 0x0dc4edb0 0x00000000
0x0253e984: 0x0dc465a0 0x0253e994 0x398a7621 0x3a1e7e60
0x0253e994: 0x0253e9bc 0x2bfd51c5 0x0dc4edb0 0x3a1e8900
0x0253e9a4: 0x00000288 0x3c2cf600 0x3c2cf880 0x0dc4edb0
0x0253e9b4: 0x00000001 0xf23b1250 0x0253e9f0 0x398b8d5f
0x0253e9c4: 0x00000001 0xf23b1250 0xf23b1250 0x028ec400
0x0253e9d4: 0x028ec400 0x0dc4edb0 0x0dc51250 0x00000004
0x0253e9e4: 0x08233f60 0x0825ce80 0x00000004 0x00000000
0x0253e9f4: 0x00000000 0x01810258 0x00000000 0x0180bfb4
0x0253ea04: 0x03010a00 0x2fd185ee 0x000001fc 0x0253eaa8
0x0253ea14: 0x002a7e51 0x43a00000 0x42480000 0x0253ea28
0x0253ea24: 0x2f575193 0x0253ea38 0x000002e4 0x0253eabc
0x0253ea34: 0x2fd2622b 0x0253ea4c 0x4cc6d004 0x00000000
0x0253ea44: 0x00000000 0x00000001 0x00000000 0x3a836a94
0x0253ea54: 0x3a83b3bc 0x2fd4513e 0x2f862a5d 0x0253ea74
0x0253ea64: 0x398a4f1b 0x00000001 0x00000001 0x0000009c
0x0253ea74: 0x0253ea84 0x3989dab3 0x00000001 0x00000001
0x0253ea84: 0x0253ea98 0x00000000 0x00000000 0x0000009c
0x0253ea94: 0x00000001 0x3a836a94 0x03010a00 0x00000001
0x0253eaa4: 0x00000400 0x0253eaf8 0x2f58f51b 0x0dc51250
0x0253eab4: 0x00000000 0x00000001 0x3c30905c 0xc2000000
0x0253eac4: 0x00000000 0x2f61f909 0x4cc6d004 0x08097c60
0x0253ead4: 0x0253ebbc 0x0828a2e0

[Image: https://quip.com/-/blob/d_fRgFtzXSlFrIQBAypiSw] http://clang.llvm.org/docs/AutomaticReferenceCounting.html#arc-runtime-objc-retainautoreleasedreturnvalue
说明

id objc_retainAutoreleasedReturnValue(id value);

Always returns value.

__text:000F1738 ; void __cdecl -[GADBannerView loadRequest:](struct GADBannerView *self, SEL, id)
__text:000F1738 __GADBannerView_loadRequest__ ; DATA XREF: __objc_const:017A0144o
__text:000F1738 000 STMFD SP!, {R4-R7,LR}

__text:000F1950 ; GADBannerView - (id)slot
__text:000F1950
__text:000F1950 ; id __cdecl -[GADBannerView slot](struct GADBannerView *self, SEL)
__text:000F1950 __GADBannerView_slot_ ; DATA XREF: __objc_const:017A0168o
__text:000F1950 000 MOV R1, #(_OBJC_IVAR_$_GADBannerView._slot - 0xF1960) ; GADSlot *_slot;
__text:000F1958 000 LDR R1, [PC,R1] ; GADSlot *_slot;
__text:000F195C 000 LDR R0, [R0,R1]
__text:000F1960 000 BX LR

#import <iAd/ADBannerView.h>@interface PlayViewController : UIViewController
@property(retain, nonatomic) ADBannerView *iAdView; // @synthesize iAdView;
@property(retain, nonatomic) UIView *localAdView; // @synthesize localAdView;
@end@interface GADBannerView : UIView
@end%hook GADBannerView
-(id)slot
{id param = %orig;NSLog(@"GADBannerView_slot:%@",param);/*
Jan 20 14:34:15 Panda-iphone OPlayer Lite[2704]: GADBannerView_slot:<GADSlot: 0x833b650>
Jan 20 14:34:15 Panda-iphone OPlayer Lite[2704]: GADBannerView_slot:<GADSlot: 0x833b650>*/return param;
}
%end

[Image: https://quip.com/-/blob/Pm15Pp2LrSoo5N0zqTBAkg]@interface GADRequestPrivate : GADRequest <NSCopying>
+ (id)requestPrivateWithRequest:(id)arg1;

GADSlot loadPrivateRequest:autoRefresh: param1:[GADRequestPrivate requestPrivateWithRequest] param2:0

[Image: https://quip.com/-/blob/AWae2mXCf6Cenv4BDipJuA]分析完毕~~~~~~~现在干掉它

#import <iAd/ADBannerView.h>@interface PlayViewController : UIViewController
@property(retain, nonatomic) ADBannerView *iAdView; // @synthesize iAdView;
@property(retain, nonatomic) UIView *localAdView; // @synthesize localAdView;
@end@interface GADBannerView : UIView
@end%hook PlayViewController
- (void)planAds
{NSLog(@"viewDidLoad_localAdView :%@",self.localAdView);self.localAdView.hidden=YES;//干掉 localAdViewreturn;//干掉planAds函数
}
%end

[Image: https://quip.com/-/blob/w81ux2D6ZUDKaNftAOMdzA]没有广告了~~~~~~~~~

OPlayer Lite 最新去广告相关推荐

  1. 格式工厂 v4.0.0 最新去广告绿色纯净版

    最好用的多媒体格式转换利器:格式工厂现已更新至v4.0,此次更新加入最新的HEVC(H265)编码,MP4,MKV的压缩比大幅度提高!格式工厂,轻松转换一切你想要的格式!利器在手,转换不愁! 格式工厂 ...

  2. ehviewer_ehviewer下载预约_ehviewer免登陆版最新v1.0.30下载预约去广告清爽版_游戏吧...

    ehviewer是小编给各位小伙伴精心准备的最新去广告清爽版本,这个版本的最大特色就是可以选择免登录直接进入,本作是一款绅士必备的漫画阅读软件.相信用过的小伙伴都非常喜欢.需要的快点来看看吧. ehv ...

  3. IOS OPlayer Lite广告去除

    一.去除思路 OPlayer Lite是一款视频播放软件,可以播放本地视频,也可以播放链接,但是播放视频时上方又出现广告框,飞行模式和联网模式还不一样,联网状态下广告会自动变换.确定以下去除思路: 1 ...

  4. android键盘广告,android键盘钢琴Lite郑永修改版+去广告

    10年前 (2011-04-11) | 16,521 views | 13 条评论 | 本文共722个字 最强大的android版钢琴软件非xPiano莫属,xPiano是一款专业的钢琴模拟软件,功能 ...

  5. 迅播Gvod最新版本去广告补丁,不留任何广告

    一.软件说明: 迅播Gvod是迅雷出品的一个P2P播放器,是一款观看的人数越多,速度越快的播放器,凭借迅雷丰富的资源和流量支持,Gvod目前已经获得了广大站长和用户的认可 但是由于官方的一些原因,导致 ...

  6. adguard home上网慢_最新DNS神器AdGuardHome详细配置教程,彻底解决DNS污染问题、去广告、秒开网页!从此网络快人一步...

    好久没有折腾ADgardhome了,随着官方的升级,现在ad home的普及率已经非常高,并且集成在各个路由器固件之中,省去我们自己安装的麻烦.它最大的功能特点就是去广告,当然还有DNS防污染功能,都 ...

  7. PPS网络电视最新清爽去广告版

    PPS网络电视 /去广告,一直在用的网络电视软件,速度快,内容很丰富的.去掉了pps广告,更加好了!!推荐哦 pps.pps影音(全称PPStream)是全球第一家集P2P直播点播于一身的网络电视软件 ...

  8. 红米note7找android,红米 NOTE7 PRO简易测评与去广告

    红米 NOTE7 PRO简易测评与去广告 2019-06-16 13:35:40 16点赞 67收藏 11评论 创作立场声明:本人为穷炸了的学生党,文笔有限.以下内容为主观测评. 写在前面 这款手机的 ...

  9. centos8安装搜狗输入法_搜狗拼音输入法去广告版

    搜狗输入法是搜狗公司2006年6月推出的一款汉字输入法工具.与传统输入法不同,搜狗输入法是第一款为互联网而生的输入法--它通过搜索引擎技术,将互联网变成了一个巨大的"活"词库.应该 ...

最新文章

  1. async await:比requests 更强大
  2. R语言ggplot2可视化:ggplot2中使用element_text函数设置轴标签文本粗体字体(bold text,只设置y轴的标签文本使用粗体字体)
  3. 我对VTP的一点心得
  4. vb.net与c#相互转换工具
  5. 学生课程表管理系统——stage 1
  6. Connection closed by foreign host. 误改BUG
  7. ERP开放平台定制化远程高效协作秘笈
  8. IDEA 中的.iml文件和.idea文件夹 ( 隐藏方式 )
  9. design php 如何使用ant_Ant Design Pro初探—添加面包屑
  10. 继承单例模式 php_解决 PhpStorm 对 用单例模式实例化PHP类时,代码自
  11. vue项目中vue-fullcalendar的使用(行程日历)
  12. 扫地机器人不取出水箱可以吗_小米扫地机器人水箱不出水是怎么回事
  13. 旋转框目标检测————关于旋转框定义和解决方案
  14. 教你一眼认出英语单词的意思
  15. OpenCV 实时对象跟踪(质心跟踪)
  16. linux vi 保存退出与不保存退出
  17. 存储管理系统课程设计——C语言实现请求页式存储管理模拟系统
  18. 也谈B2B网站的发展方向和趋势
  19. vs调试nuget包_高冷?孩子气?醋包?那不得是分对象啊
  20. 手机php开发工具_最热门的PHP开发工具

热门文章

  1. postsql数据库从window迁移到linux服务器
  2. 小程序Android分享朋友圈
  3. 数据回顾东京奥运会中国体育代表团金牌时刻
  4. 1064:奥运奖牌计数题
  5. Eclipse 安装ADT
  6. 应用程序无法启动,因为应用程序的并行配置不正确;解决办法
  7. 电脑如何长截屏截图_您的意见很重要-截屏技术调查
  8. ARM 官方文档下载地址
  9. 芯科EFRBG22C112 empty工程创建
  10. BT656/BT601/BT1120协议以及DM365/DM355/DM6467上使用的YUV颜色空间说明