iOS Swift逆向——代码和IDA反编译对照

XCode Version 15.4 (15F31d)。编译选项是模拟器,iPhone15Pro,Release。

 

Swift 类型是强而有力的, 尽管只有六个。不像其他语言有很多内嵌类型, Swift 只有六个。

四个命名类型: 协议, 枚举, 结构体, 类。两个复合类型: 元组, 函数。

你可能认为还有其他基本类型—比如 Bool, Int, UInt, Float, Double, Character, String, Array, Set, Dictionary, Optional, 等等。然后事实是, 这些实际上是建立在命名类型上的。属于 Swift 标准库的部分。

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}
void __cdecl -[ViewController viewDidLoad](_TtC11hello_swift14ViewController *self, SEL a2)
{
  objc_super v2; // [xsp+0h] [xbp-20h] BYREF

  v2.receiver = self;
  v2.super_class = (Class)type metadata accessor for ViewController(self, a2);
  -[ViewController viewDidLoad](&v2, "viewDidLoad");
}

override func viewDidLoad() {
        super.viewDidLoad()

        let myIntVariable1 = 100
        print(myIntVariable1)
    }

void __cdecl -[ViewController viewDidLoad](_TtC11hello_swift14ViewController *self, SEL a2)
{
  id v2; // x19
  __int64 v3; // x0
  __int64 v4; // x20
  objc_super v5; // [xsp+0h] [xbp-20h] BYREF

  v5.receiver = self;
  v5.super_class = (Class)type metadata accessor for ViewController(self, a2);
  v2 = objc_retain(v5.receiver);
  -[ViewController viewDidLoad](&v5, "viewDidLoad");
  v3 = __swift_instantiateConcreteTypeFromMangledName(&demangling cache variable for type metadata for _ContiguousArrayStorage<Any>);
  v4 = swift_allocObject(v3, 64LL, 7LL);
  *(_OWORD *)(v4 + 16) = xmmword_100005740;
  *(_QWORD *)(v4 + 56) = &type metadata for Int;
  *(_QWORD *)(v4 + 32) = 100LL;
  print(_:separator:terminator:)(v4, 32LL);
  objc_release(v2);
  swift_release(v4);
}

导入swift.py插件脚本

void __cdecl -[ViewController viewDidLoad](_TtC11hello_swift14ViewController *self, SEL a2)
{
  id v2; // x19
  __int64 v3; // x0
  __int64 v4; // x20
  objc_super v5; // [xsp+0h] [xbp-20h] BYREF
  Swift::String v6; // 0:x1.16
  Swift::String v7; // 0:x3.16

  v5.receiver = self;
  v5.super_class = (Class)type metadata accessor for ViewController(self, a2);
  v2 = objc_retain(v5.receiver);
  -[ViewController viewDidLoad](&v5, "viewDidLoad");
  v3 = __swift_instantiateConcreteTypeFromMangledName(&demangling cache variable for type metadata for _ContiguousArrayStorage<Any>);
  v4 = swift_allocObject(v3, 64LL, 7LL);
  *(_OWORD *)(v4 + 16) = xmmword_100005740;
  *(_QWORD *)(v4 + 56) = &type metadata for Int;
  *(_QWORD *)(v4 + 32) = 100LL;
  v6._countAndFlagsBits = 32LL;
  v6._object = (void *)0xE100000000000000LL;
  v7._countAndFlagsBits = 10LL;
  v7._object = (void *)0xE100000000000000LL;
  print(_:separator:terminator:)((Swift_ArrayAny *)v4, v6, v7);
  objc_release(v2);
  swift_release(v4);
}
__const:0000000100005740 ; ===========================================================================
__const:0000000100005740
__const:0000000100005740 ; Segment type: Pure data
__const:0000000100005740                 AREA __const, DATA, READONLY, ALIGN=4
__const:0000000100005740                 ; ORG 0x100005740
__const:0000000100005740 xmmword_100005740 DCB 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0
__const:0000000100005740                                         ; DATA XREF: -[ViewController viewDidLoad]+58↑o
__const:0000000100005740                                         ; -[ViewController viewDidLoad]+5C↑r ...
__const:0000000100005750 aHelloSwift     DCB "hello_swift",0     ; DATA XREF: __constg_swiftt:module descriptor ↓o
__const:000000010000575C aViewcontroller DCB "ViewController",0  ; DATA XREF: __constg_swiftt:nominal type descriptor for ViewController↓o
__const:000000010000576B                 ALIGN 0x10


class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        print("MyStruct value:")
    }
}
void __cdecl -[ViewController viewDidLoad](_TtC11hello_swift14ViewController *self, SEL a2)
{
  id v2; // x19
  __int64 v3; // x0
  __int64 v4; // x20
  objc_super v5; // [xsp+0h] [xbp-20h] BYREF

  v5.receiver = self;
  v5.super_class = (Class)type metadata accessor for ViewController(self, a2);
  v2 = objc_retain(v5.receiver);
  -[ViewController viewDidLoad](&v5, "viewDidLoad");
  v3 = __swift_instantiateConcreteTypeFromMangledName(&demangling cache variable for type metadata for _ContiguousArrayStorage<Any>);
  v4 = swift_allocObject(v3, 64LL, 7LL);
  *(_OWORD *)(v4 + 16) = xmmword_100005740;
  *(_QWORD *)(v4 + 56) = &type metadata for String;
  *(_QWORD *)(v4 + 32) = 0x746375727453794DLL;
  *(_QWORD *)(v4 + 40) = 0xEF3A65756C617620LL;
  print(_:separator:terminator:)(v4, 32LL);
  objc_release(v2);
  swift_release(v4);
}

按R将hex转char:

  *(_QWORD *)(v4 + 32) = 'tcurtSyM';
  *(_QWORD *)(v4 + 40) = '\xEF:eulav ';

字符串长一些:

print("MyStruct value:wawefwaefawefawefawefawefawefawefawefawefawefawefawefawefawefawefawefawefawefawefawefaweofihawioehufi")
void __cdecl -[ViewController viewDidLoad](_TtC11hello_swift14ViewController *self, SEL a2)
{
  id v2; // x19
  __int64 v3; // x0
  __int64 v4; // x20
  objc_super v5; // [xsp+0h] [xbp-20h] BYREF

  v5.receiver = self;
  v5.super_class = (Class)type metadata accessor for ViewController(self, a2);
  v2 = objc_retain(v5.receiver);
  -[ViewController viewDidLoad](&v5, "viewDidLoad");
  v3 = __swift_instantiateConcreteTypeFromMangledName(&demangling cache variable for type metadata for _ContiguousArrayStorage<Any>);
  v4 = swift_allocObject(v3, 64LL, 7LL);
  *(_OWORD *)(v4 + 16) = xmmword_1000056C0;
  *(_QWORD *)(v4 + 56) = &type metadata for String;
  *(_QWORD *)(v4 + 32) = 0xD000000000000074LL;
  *(_QWORD *)(v4 + 40) = 0x8000000100005780LL;
  print(_:separator:terminator:)(v4, 32LL);
  objc_release(v2);
  swift_release(v4);
}
__const:00000001000056C0 xmmword_1000056C0 DCB 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0



__cstring:0000000100005760 ; ===========================================================================
__cstring:0000000100005760
__cstring:0000000100005760 ; Segment type: Pure data
__cstring:0000000100005760                 AREA __cstring, DATA, READONLY, ALIGN=4
__cstring:0000000100005760                 ; ORG 0x100005760
__cstring:0000000100005760 aTtc11helloSwif DCB "_TtC11hello_swift14ViewController",0
__cstring:0000000100005760                                         ; DATA XREF: __objc_const:ViewController↓o
__cstring:0000000100005760                                         ; __objc_data:ViewController↓o
__cstring:0000000100005782 aV1608          DCB "v16@0:8",0         ; DATA XREF: __objc_methlist:0000000100005650↑o
__cstring:0000000100005782                                         ; __objc_methlist:0000000100005664↑o ...
__cstring:000000010000578A a32081624       DCB "@32@0:8@16@24",0   ; DATA XREF: __objc_methlist:0000000100005670↑o
__cstring:000000010000578A                                         ; __objc_methlist:00000001000056AC↑o
__cstring:0000000100005798                 DCB 0
__cstring:0000000100005799                 ALIGN 4
__cstring:000000010000579C                 DCB 0
__cstring:000000010000579D                 ALIGN 0x20
__cstring:00000001000057A0 aMystructValueW DCB "MyStruct value:wawefwaefawefawefawefawefawefawefawefawefawefawef"
__cstring:00000001000057A0                                         ; DATA XREF: -[ViewController viewDidLoad]+78↑o
__cstring:00000001000057E0                 DCB "awefawefawefawefawefawefawefawefawefaweofihawioehufi",0
__cstring:0000000100005815                 ALIGN 8
__cstring:0000000100005818                 DCB 0
__cstring:0000000100005819                 ALIGN 4
__cstring:000000010000581C                 DCB 0
__cstring:000000010000581D           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值