2021年11月22日

FlutterDart逆向从自信入门到精通跑路系列(2)-编写CrackMe

作者 huruwo

FlutterDart逆向从自信入门到精通跑路系列(2)-编写CrackMe

前言

这次依然是FlutterDart逆向系列的前置部分,学习如何正向的开发一个Flutter

在这里不想过多的深入到dart语言和flutter的本身细节中去。

只简单的讲讲用到的一些控件和按钮。

编写CrackMe

从编写一个简单的CrackMe入手

界面设计

一个按钮即可 加一个填写输入的框

校验即可

children: <Widget>[
            const Text(
              '填写正确的答案:',
            ),
            TextField(
              controller: textController,
              style: Theme.of(context).textTheme.headline4,
            ),
            MaterialButton(
                child: const Text('提交'),
                color: Colors.blue,
                onPressed: (){
                  if(textController.text.isEmpty){
                     toast("请填写答案再提交");
                  }else{
                    if(textController.text==getMd5String(getMd5String("flutter"))) {
                      toast("恭喜你成功拿到flag");
                    }else{
                      toast("提交失败没有拿到flag");
                    }
                  }
            })

如此的简单

一个text
一个TextField
一个button

组成了一套按钮 语法看起来像java嵌套了js,可以直接阅读。

加密算法选择

我们选择MD5算法

pubspec.yaml 配置文件导入相关包

dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.2
  fluttertoast: ^8.0.8
  crypto: ^3.0.1

直接使用:

String getMd5String(String str){
   var bytes = utf8.encode(str+"test2021"); 
   var digest = md5.convert(bytes);
   return digest.toString();
}

特意加了盐

运行界面

3a62c328d3eeba5de22ad5800953ccd9.png

总结

没有总结